article

هوشمند سازی پنل ورود و خروج سایت

mysql-php-smart-login

در مطالب قبلی از بخش آموزش کاربردی کار با php و mysql، به طور مفصل به مبحث ساخت فرم عضویت و ورود و خروج کاربران پرداختیم، بحث نشست ها یا سشن (session) را با هم مرور کرده و با نحوه رمزنگاری کلمه عبور و همچنین ذخیره و بازیابی اطلاعات اعضاء سایت آشنا شدیم، این بار در تکمیل آموزش های قبلی، می خواهیم کمی بخش مدیریت سایتمان را توسعه داده و آن را به اصطلاح هوشمندتر کنیم، در این مطلب خواهیم دید که چگونه می توان امکاناتی مانند "مرا به خاطر بسپار" و  خروج خودکار بعد از چند دقیقه غیر فعال بودن را در پنل سایت خود افزود.

ایجاد امکان "مرا به خاطر داشته باش" در پنل سایت


حتما سایت های زیادی را دیده اید که در هنگام ورود اطلاعات نام کاربری و کلمه عبور، معمولا به صورت یک چک باکس، امکانی تحت عنوان "مرا به خاطر داشته باش" یا عباراتی از این دست دارند، این امکان در واقع به این معنی است که سیستم تا مدت زمان معینی از شما در مراجعات بعدی نام کاربری و کلمه عبور نخواهد خواست و به صورت هوشمندانه ای شما را به یاد خواهد داشت، اما این امکان چگونه ایجاد می شود؟
این امکان به این صورت کار می کند: هنگامی که گزینه مورد نظر را انتخاب می کنید، برنامه یک کوکی (ckookie) در مرورگر شما ایجاد کرده و متناسب با آن کوکی، در سرور، متغیرهای سشن را برای مدت زمانی که برنامه نویس تعیین کرده است (به فرض یک ماه) نگهداری می کند، تا زمانی که سشن های مورد نظر در سرور وجود دارند و به طور مثال به دلیل منقضی شدن تاریخ کوکی یا کلیک کاربر بر روی دکمه خروج، unset نشده و از بین نرفته اند، کاربر برای سرور قابل شناسایی است و بدون ورود نام کاربری و کلمه عبور، حتی با بستن پنجره مرورگر و مراجعه بعدی، می تواند از امکانات بخش اعضاء استفاده نماید، برای ایجاد این امکان در php ابتدا به فرمی که در آموزش قبل ساخته ایم یک چک باکس اضافه می کنیم (اگر آموزش قبلی را مطالعه نکرده اید، می توانید در انتهای این مطلب، از دکمه مربوط به مطالب قبلی و بعدی استفاده نمایید).
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>وبگو | پنل ورود و خروج در سایت با php و mysql</title>
<!-- https://webgoo.ir -->
<style type="text/css">
body{
    font-family:Tahoma, Geneva, sans-serif;
    direction:rtl;
    font-size:12px;
}
</style>
</head>
<body>
<form action="login.php" method="post">
<label for="user">نام کاربری:</label><br />
<input name="username" id="user" type="text" maxlength="255" /><br /><br />
<label for="pass">کلمه عبور:</label><br />
<input name="password" id="pass" type="password" maxlength="255" /><br /><br />
<label for="remember">مرا به خاطر بسپار:</label>
<input type="checkbox" name="remember" id="remember" checked="checked" value="1" /><br /><br />
<input type="hidden" name="check" value="sended" />
<input type="submit" value="ورود" />
</form>
</body>
</html>
توضیح:
- همان طور که ملاحظه می کنید؛ چک باکس ما در فرم بالا از نوع  input و checkbox است.
- برای اینکه به طور پیش فرض، چاک باکس فعال بوده و به حالت انتخاب شده درآمده باشد، بخش checked را اضافه می کنیم، اگر مایل هستید که به طور پیش فرض، (تیک) چک باکس غیر فعال باشد، این قسمت را حذف کنید.
- مقادیر value برای فرم بالا و قسمت چک باکس که عدد یک در نظر گرفته شده، فرضی است، شما می توانید مقادیر دیگری مثل true، ok و... در نظر بگیرید، اما نکته مهم این است که ما این مقادیر را در سمت سرور و در کد php خود به عنوان یک متغیر از فرم html دریافت خواهیم کرد تا از انتخاب شدن یا نشدن این گزینه توسط کاربر اطمینان حاصل کنیم.
اکنون در سمت سرور کد php با نام فرضی login.php را که در آموزش پیشین ساختیم، به صورت زیر ویرایش می کنیم.
<?php
//شروع یک نشست
session_start();
//دریافت و تنظیم متغیرهای ارسال شده توسط کاربر
@$username = $_POST['username'];
@$password = $_POST['password'];
@$check = $_POST['check'];
$check_error = 0;
//بررسی معتبر بودن اطلاعات ارسالی کاربر
//نام کاربری
if (!isset($username) || $username == ''){
    echo "فیلد نام کاربری نباید خالی باشد!";
    $check_error = 1;
}
//کلمه عبور
elseif (!isset($password) || $password == ''){
    echo "فیلد کلمه عبور نباید خالی باشد!";
    $check_error = 1;
}
//اطلاعات اتصال به پایگاه داده
$con = mysql_connect("localhost", "user", "pass")
or die(mysql_error());   
//نام دیتابیس
mysql_select_db("db", $con)
or die(mysql_error());
//جلوگیری از نفوذ به دیتابیس
$username = mysql_real_escape_string($username);
$password = md5($password);
if ($check_error != 1 && $check == 'sended'){
    //تطبیق اطلاعات کاربر با آنچه که در دیتابیس ذخیره شده
    $result = mysql_query ("SELECT * FROM register WHERE username = '$username' AND password = '$password'");
    // تعداد ردیف های موجود
    $count = mysql_num_rows($result);
    if($count > 0){
        // اطلاعات کاربر درست است، تنظیم مجوز های استفاده از بخش اعضاء
        $_SESSION['username'] = $_POST['username'];
        $_SESSION['password'] = $_POST['password'];
        $_SESSION['remember'] = $_POST['remember'];
        // اطلاعات کاربر صحیح است، انتقال به صفحه اعضاء
        header("location:user.php");
    }
    else{
        // اطلاعات کاربر صحیح نیست
        echo "Error!<br />";
    }
}
//پایان ارتباط با پایگاه داده  
mysql_close($con);
?>
توضیح:
- در این فایل ما سشن remember را به کد خود افزوده ایم که مقادیر آن در واقع همان مقادیر چک باکس خواهد بود.
$_SESSION['remember'] = $_POST['remember'];
به این صورت، اگر کاربر تیک "مرا به خاطر داشته باش" را غیر فعال نکرده باشد، مقدرا آن 1 و در غیر این صورت مقدار آن خالی خواهد بود.
- به دلیل اینکه در اینجا ما از تابع header و در ادامه از تابع setcookie استفاده می کنیم، باید هیچ نوع خروجی html و حتی فضای خالی یا کاراکترهای نامرئی (byte order mark یا BOM) پیش از فراخوانی آنها از طریق مرورگر ارسال نکنیم، در غیر این صورت با پیغام خطای headers already sent مواجه خواهیم شد، از این رو در کد خود، مقادیر کدهای html را حذف کرده ایم و در عوض با ایجاد یک انتقال از طریق header و location، کاربر را به طور خودکار به صفحه دیگر منتقل می کنیم.
حال نوبت به مقایسه مقادیر چک باکس و تنظیم یا عدم تنظیم کوکی است؛ لذا پس از انتقال کاربر به فایل user.php که در واقع محیط کاربری اعضای سایت است، مقادیر سشن remember را که پیش تر با دریافت اطلاعات فرم ورود تنظیم کرده ایم، بررسی می کنیم، اگر مقدار آن 1 بود، پس کاربر تمایل دارد که اطلاعاتش به خاطر سپرده شود، لذا کوکی را تنظیم می کنیم، اگر غیر از این بود، یعنی نباید کوکی یادآوری کاربر تنظیم شود.
<?php
//شروع یک نشست
session_start();
//بررسی تنظیم شدن یا نشدن متغیرهای سشن
if (!isset($_SESSION['username']) || !isset($_SESSION['password'])){
//در صورتی که متغیرهای سشن تنظیم نشده باشند، کاربر مجاز به دیدن ادامه صفحه نیست و او را به صفحه اصلی منتقل می کنیم
header("location:index.php");
die();     
}
//بررسی امکان مرا به خاطر بسپار
elseif (isset($_SESSION['remember']) && $_SESSION['remember'] == '1'){
    $login_time=3600;//یک ساعت
    setcookie(session_name(),session_id(),time()+$login_time,("/"));
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>وبگو | محیط کاربری اعضای سایت</title>
<!-- https://webgoo.ir -->
<style type="text/css">
body{
    font-family:Tahoma, Geneva, sans-serif;
    direction:rtl;
    font-size:12px;
}
</style>
</head>
<body>
شما در حال استفاده از بخش کاربری سایت هستید!
</body>
</html>
توضیح:
- از تابع setcookie برای تمدید مهلت استفاده از بخش اعضاء برای یک بار ورود کاربر (با ایجاد یک کوکی ) استفاده می کنیم.
- تابع setcookie باید یک آرگومان به صورت زمان به ثانیه داشته باشد که نمایانگر مدت زمان فعال بودن کوکی است، به فرض برای یک ساعت مقادیر 3600 ثانیه یا برای یک ماه معادل 2592000 ثانیه، بدین منظور ما از تابع time با افزودن یک مقدار به آن استفاده کرده ایم.
- نام کوکی با پارامتر session_name و مقادیر آن با session_id ذخیره می شود، همچنین برای تعیین یک مسیر (path) ذخیره سازی اطلاعات کوکی، پارامتر آخر را اضافه می کنیم، با تنظیم آن به صورت "/"، کوکی برای تمام فولدرهای یک سرور قابل دسترسی خواهد بود، در صورت عدم استفاده از متغیر path به طور پیش فرض، کوکی فقط در دایرکتوری که آن را ایجاد کرده است قابل استفاده است، به فرض با تنظیم آن به صورت "/user/" کوکی فقط در این فولدر قابل استفاده است، از این رو بهتر است همواره از روش ذکر شده در مثال استفاده کنید.
توجه کنید که قابلیت "مرا به خاطر داشته باش" برای برنامه هایی که به امنیت بالایی احتیاج دارند، معمولا توصیه نمی شود، چرا که اگر کاربر به هر دلیل از سیستم به شکل استاندارد خارج نشود (به فرض پنجره مرورگر خود را ببندد یا برق به طور ناگهانی  قطع شود)، فردی دیگر بر روی همان سیستم (و همان مرورگر) می تواند بدون وارد کردن نام کاربری و کلمه عبور و تنها با داشتن آدرس url صفحه کاربری، وارد قسمت مدیریت شود، متاسفانه این مشکلی است که بیشتر از روی ناآگاهی و معمولا در کامپیوترهای اشتراکی مانند کافی نت ها اتفاق می افتد؛ لذا استفاده از این امکان باید با در نظر گرفتن هشدارها و نکات امنیتی صورت گیرد.

ایجاد امکان خروج خودکار بعد از مدت زمان عدم فعالیت


در مقابل امکان "مرا به خاطر داشته باش"، قابلیت دیگری را نیز می توان برای پنل مدیریت سایت در نظر گرفت که معمولا به دلیل وجود حساسیت های خاص و ارتقاء امنیت صورت می گیرد، این امکان ایجاد یک سیستم خودکار خروج است، یعنی اگر به فرض مدت زمانی کاربر بدون فعالیت در صفحه باقی بماند، نشست او خود به خود منقضی شود، در این حالت حتی در موقعی که پنجره مرورگر هنوز باز است، اعتبار کاربر در سرور به پایان می رسد و او باید مجددا در پنل سایت وارد شود، این امکان معمولا در سیستم هایی که جنبه امنیت برایشان از اهمیت بالایی برخوردار است (مانند سیستم تراکنش های بانکی و مالی، کنترل پنل هاست ها و...) به کار گرفته می شود.
برای افزودن این امکان به سیستم خود، ابتدا در فایل اصلی لاگین، یعنی login.php مقادیر زیر را در ابتدای کد اضافه کنید.
<?php
//زمان برای خروج خودکار کاربر
$now_time = time();
$_SESSION['time_started'] = $now_time;      
$_SESSION['time_remaining'] = 3600;
?>
به این صورت:
<?php
//شروع یک نشست
session_start();
//زمان برای خروج خودکار کاربر
$now_time = time();
$_SESSION['time_started'] = $now_time;      
$_SESSION['time_remaining'] = 3600;
//دریافت و تنظیم متغیرهای ارسال شده توسط کاربر
@$username = $_POST['username'];
@$password = $_POST['password'];
@$check = $_POST['check'];
$check_error = 0;
//بررسی معتبر بودن اطلاعات ارسالی کاربر
//نام کاربری
if (!isset($username) || $username == ''){
    echo "فیلد نام کاربری نباید خالی باشد!";
    $check_error = 1;
}
//کلمه عبور
elseif (!isset($password) || $password == ''){
    echo "فیلد کلمه عبور نباید خالی باشد!";
    $check_error = 1;
}
//اطلاعات اتصال به پایگاه داده
$con = mysql_connect("localhost", "user", "pass")
or die(mysql_error());   
//نام دیتابیس
mysql_select_db("db", $con)
or die(mysql_error());
//جلوگیری از نفوذ به دیتابیس
$username = mysql_real_escape_string($username);
$password = md5($password);
if ($check_error != 1 && $check == 'sended'){
    //تطبیق اطلاعات کاربر با آنچه که در دیتابیس ذخیره شده
    $result = mysql_query ("SELECT * FROM register WHERE username = '$username' AND password = '$password'");
    // تعداد ردیف های موجود
    $count = mysql_num_rows($result);
    if($count > 0){
        // اطلاعات کاربر درست است، تنظیم مجوز های استفاده از بخش اعضاء
        $_SESSION['username'] = $_POST['username'];
        $_SESSION['password'] = $_POST['password'];
        $_SESSION['remember'] = $_POST['remember'];
        // اطلاعات کاربر صحیح است، انتقال به صفحه اعضاء
        header("location:user.php");
    }
    else{
        // اطلاعات کاربر صحیح نیست
        echo "Error!<br />";
    }
}
//پایان ارتباط با پایگاه داده  
mysql_close($con);
?>
توضیح:
- در ابتدا ما زمان آخرین فعالیت کاربر را در متغیر now_time ذخیره می کنیم و آن را به سشن time_started نسبت می دهیم.
- سپس حداکثر زمان مجاز برای ماندن کاربر در صفحات (بدون رفرش کردن یا رفتن به صفحه دیگر) را  در سشن دیگر با نام time_remaining تنظیم می کنیم.
این اطلاعات به دلیل اینکه از نوع سشن هستند، در صفحات دیگر که در آنها نیز سشن را شروع می کنیم (با session_start)، قابل دسترسی می باشند، لذا پس از انتقال کاربر به صفحه user.php می توانیم حداکثر زمان مجاز را با زمان آخرین فعالیت او مقایسه کنیم، اگر اختلاف کم تر از صفر بود، پس کاربر زمانی ندارد و باید از نو وارد سیستم شود، در غیر این صورت حداکثر زمان او را برای به فرض 1 ساعت دیگر (3600 ثانیه) تمدید می کنیم، این کار را در ادامه انجام داده ایم.
<?php
//شروع یک نشست
session_start();
//بررسی تنظیم شدن یا نشدن متغیرهای سشن
if (!isset($_SESSION['username']) || !isset($_SESSION['password'])){
//در صورتی که متغیرهای سشن تنظیم نشده باشند، کاربر مجاز به دیدن ادامه صفحه نیست و او را به صفحه اصلی منتقل می کنیم
header("location:index.php");
die();     
}
//بررسی امکان مرا به خاطر بسپار
elseif (isset($_SESSION['remember']) && $_SESSION['remember'] == '1'){
    $login_time=3600;//یک ساعت
    setcookie(session_name(),session_id(),time()+$login_time,("/"));
}
//مقایسه زمان باقی مانده
$old_time = $_SESSION['time_started'];      
$new_time = time();     
$remain_time = $new_time - $old_time;      
$_SESSION['time_remaining'] = $_SESSION['time_remaining'] - $remain_time;      
if ($_SESSION['time_remaining'] > 0) {
    //تمدید مهلت
    $_SESSION['time_started'] = $new_time;     
}
else {
    //زمان کاربر به پایان رسیده است، انتقال به صفحه ورود
    header("location:index.php");      
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>وبگو | محیط کاربری اعضای سایت</title>
<!-- https://webgoo.ir -->
<style type="text/css">
body{
    font-family:Tahoma, Geneva, sans-serif;
    direction:rtl;
    font-size:12px;
}
</style>
</head>
<body>
شما در حال استفاده از بخش کاربری سایت هستید!
</body>
</html>
با کمی دقت در کد بالا و آشنایی با نحوه عملکرد سشن ها در php، به راحتی می توانید فعل و انفعالات صورت گرفته را در مثال بالا تفسیر کرده و با توجه به برنامه خود از آنها استفاده نمائید.
sectionدسته بندی: آموزش کاربردی » MySQL
related مطالب بیشتر:
» آموزش ساخت فرم تماس با PHP و MySQL
» تعویض کد امنیتی Captcha با Ajax و MySQL
» صفحه بندی مطالب و محتوا با PHP و MySQL
» ایجاد لینک دانلود مدت دار با PHP و MySQL
» آموزش ساخت پنل ورود و خروج سایت با PHP و MySQL
commentنظرات (۷۰ یادداشت برای این مطلب ارسال شده است)
more یادداشت های جدید بر اساس تاریخ ارسال در انتهای یادداشت های موجود نمایش داده می شوند.
نویسنده: fati
زمان: ۱۱:۲۹:۰۹ - تاریخ: ۱۳۹۳/۰۵/۱۲
سلام.
چیکار کنیم که وقتی مقدار سشن ها رو تو صفحات مختلف انتقال دادیم، به هنگام ریلود شدن صفحه ، از دستش ندیم و حفظ بشوند . مال من وقتی تازه لاگین میکنم سشنو میشناسه و چاپم میکنه اما وقتی رفرش میکنم، برای بعضیاشون پیعامNotice: Undefined index میده.
پاسخ: 
سلام
اگر به درستی از تابع سشن در صفحات مختلف استفاده کرده باشید، با رفرش صفحه اتفاق خاصی نمی افتد، پیام ممکن است ناشی از موارد دیگر باشد که در هر حال بدون بررسی دقیق کدها نمی توان نظر خاصی داد.
نویسنده: hadi0098
زمان: ۲۰:۵۷:۲۹ - تاریخ: ۱۳۹۳/۰۵/۲۱
سلام و عرض خسته نباشید
میخواستم بدونم آیا راهی وجود داره که بشه توی این پنل ورود رو برای بعضی از کاربران غیر فعال کرد البته من این کار رو انجام دادم اما به یه مشکلی مواجه شدم این کد
$result = mysql_query ("SELECT * FROM user WHERE username = '$username' AND userpw = '$password' AND userprivilegien != 'mod'");
توی این کد فقط کاربران mod می تونن وارد بشن ولی من میخوام که کاربران mod و admins بتونن وارد پنل بشن
اگه توضیحی بدید ممنون میشم
پاسخ: 
سلام
آنچه که از نمونه کد شما برداشت می شود، اتفاقا تنها کاربران غیر از سطح دسترسی "mod" انتخاب می شوند، در هر صورت با افزودن یک AND (یا در صورت نیاز OR) دیگر به پرس و جوی خود می توانید سطح "admins" را هم اضافه کنید (البته ظاهرا پرس و جوی فعلی شما برعکس هدف شما است!)
نویسنده: امین
زمان: ۲۰:۱۳:۰۸ - تاریخ: ۱۳۹۳/۰۵/۲۶
با سلام خدمت شما.
من توی وب سایتم یک دیتابیس و یک فرم برای نام کاربری و رمز عبور دارم. اگه فردی که عضو سایته بخواد بصورت دستی نام کاربری بده و وارد سایت بشه مشکلی نیست اما چه کار کنم که مثل فیسبوک هر بار که وارد میشه مستقیم وارد صفحه خودش بشه. تمامی مراحلی که شما گفتید رو انجام دادم مثل سشن و کوکی ولی هر بار که وارد سایت میشم بازم صفحه اول سایت میاد و نام کاربری و رمز می خواد یعنی خودش وارد نمیشه. البته لازم به ذکر هستش که من از wampserver استفاده میکنم به نظر شما مشکل میتونه استفاده از wamp باشه یا جای دیگست. لطفا راهنمایی کنید. با تشکر
پاسخ: 
سلام
صرف استفاده از سشن و کوکی و... به خودی خود مشکلی را حل نمی کند! در واقع باید بدانید این مباحث چه کاربردی دارند و نحوه کار آنها را به خوبی درک کنید، در این صورت هدف مورد نظرتان علاوه بر روش آموزش داده شده، به راحتی با ایجاد یک کوکی مدت دار و ذخیره مقدار آن در دیتابیس و تطبیق اطلاعات ارسالی کوکی با دیتابیس هنگام ورود مجدد کاربر، قابل ایجاد است.
در این رابطه تفاوت خاصی بین سرور مجازی یا سایت آنلاین وجود ندارد، مگر اینکه امکاناتی مربوط به کوکی در سرور مجازی یا مرورگرتان محدود شده باشد که معمولا به صورت پیش فرض محدودیتی وجود ندارد.
نویسنده: Ali Zeus
زمان: ۱۴:۵۰:۱۱ - تاریخ: ۱۳۹۳/۰۵/۲۷
با سلام و ممنون از اموزش های خوبتون
سوالی داشتم که شاید ربطی به این قسمت نداشته باشه ولی ممنون میشم کمک کنید
برای فرم ورود به پنل مدیریت قابلیتی نوشتم که اگه کاربر بیش از سه بار اطلاعاتش رو اشتباه وارد کرد به مدت 5 دقیقه از ورودش جلوگیری کنه اما فقط در لوکال هاست کار میکنه
اینم سورسش
@$panel_error=$_COOKIE['login_panel_error'];
if(!$panel_error){$panel_error=0;}
if($panel_error>3){echo'به مدت 5 دقیقه اجازه ورود ندارید'; exit;}
//اگر اطلاعات صحیح نبود
if (!$check_user->num_rows){setcookie('login_panel_error',$panel_error+1,time()+300); echo'اطلاعات وارد شده صحیح نیست';}
این قسمت مربوط به ارسال کوکی و بررسی کوکی هست
پاسخ: 
سلام
طبق اطلاعات ارائه شده تنها ایرادی که می توان به آن پی برد عدم تنظیم پارامتر path برای تابع setcookie است، بهتر است در انتها از علامت / برای تعیین path کوکی استفاده کنید (در نمونه کدهای آموزش حاضر این حالت استفاده شده).
نویسنده: Ali Zeus
زمان: ۰۱:۳۱:۴۷ - تاریخ: ۱۳۹۳/۰۵/۲۸
با سلام و بسیار ممنون از پاسختون
تست کردم ولی بازم کوکی نمیده
هم بصورت
setcookie('login_panel_error',$panel_error+1,time()+300,("/"));
و هم بصورت
setcookie('login_panel_error',$panel_error+1,time()+300, "/");
به اجبار با جاوا کوکی میدم
{$panel_error=$panel_error+1;
echo'<script type="text/javascript">document.cookie = "login_panel_error='.$panel_error.'; max-age=300"; alert("اطلاعات وارد شده صحیح نیست !"); window.location.href = "login.php";</script>'; exit;}
و با عرض معذرت سوال دیگه ای که داشتم اینه که ایا
mysql_real_escape_string
فقط در اتصال mysql_connect کاربرد داره؟
چون من با یک فانکشن
<?php function db_connect(){
$result = new mysqli('localhost', 'un', 'pass', 'db');
if(!$result){throw new Exception('dont connect');}
else{return $result;}} ?>
دیتابیس رو به فایل متصل میکنم و هر کلمه ای که از
mysql_real_escape_string
عبور میکنه خروجیش صفر میشه
پاسخ: 
سلام
در مورد مشکل اول کمک خاصی نمی توان کرد، syntax مشکلی ندارد لذا نیاز به تست آنلاین دارد!
در مورد تابع
mysql_real_escape_string
این تابع نیاز به یک اتصال از نوع mysql_connect دارد، در صورتی که کدهای شما با اکستنشن mysqli نوشته شده، لذا باید از توابع مربوط به mysqli استفاده کنید، ماند روش prepare و bind_param یا تابع mysqli_real_escape_string.
نویسنده: امین
زمان: ۱۰:۰۴:۳۲ - تاریخ: ۱۳۹۳/۰۵/۲۸
با سلام و عرض خسته نباشید.
ابتدا از پاسخی که به سوال دفعه پیشم دادید تشکر میکنم. دفعه قبل در مورد نحوه اتصال خودکار کاربر به صفحه شخصی وب سایت و استفاده از کوکی و... پرسیدم و شما گفتید از کوکی مدت دار و ذخیره مقدار اون در دیتابیس میشه استفاده کرد. حالا سوال من اینه که این دیتابیس محلیه یعنی تو سیستم کاربره یا دیتابیس سروره. اگه در دیتابیس سرور باشه چه جوری سرور سیستم هر کاربر رو شناسایی میکنه و در نتیجه اطلاعات هر فرد رو در میاره به عبارتی ایا برای هر سیستم در دیتابیس شناسه ای تعریف میکنه؟ نمی دونم تونستم مطلب رو برسونم.
پاسخ: 
سلام
به نظر درک شما از نحوه کار کوکی و سشن کامل نیست!
در وب دو مبحث به نام کوکی و سشن داریم، در سشن یا نشست به زبان ساده دو اتفاق رخ می دهد، یک کد شناسایی برای کابر در سرور ایجاد می شود و اطلاعات همان کد به صورت کوکی با مدت زمان انقضای مشخص در مرورگر کاربر ایجاد می گردد، از این به بعد هر زمان که صفحه مورد نظر یا صفحه دیگری از سایت مورد نظر (بسته به path تنظیم شده در کوکی) را فراخوانی کنید، مرورگر اطلاعات کوکی را به سرور ارسال کرده و سرور بررسی می کند تا ببیند چنین اطلاعاتی مطابق با یک سشن است یا خیر!
در مورد تنظیم کوکی و ثبت در دیتابیس نیز چنین اتفاقی رخ می دهد، یک کوکی در مرورگر کاربر ایجاد می کنیم و مقدار آن را در دیتابیس سرور نیز ذخیره می کنیم، از این به بعد هر زمان صفحه مورد نظر را فراخوانی کنید، مرورگر اطلاعات کوکی را به سرور ارسال می کند، در سرور می توان اطلاعات ارسالی را با مقادیر موجود در دیتابیس تطبیق داد.
نکته: مرورگر تنها زمانی اطلاعات کوکی را ارسال می کند که:
1- تاریخ انقضای آن نگذشته باشد.
2- path تنظیم شده برای کوکی ریشه سایت یا دایرکتوری سطح بالاتر از دایرکتوری (یا خود دایرکتوری) درخواستی باشد.
نویسنده: Ali Zeus
زمان: ۲۱:۰۷:۳۳ - تاریخ: ۱۳۹۳/۰۵/۲۸
با سلام مجدد و بسیار ممنون از پاسختون
مشکل بنده با فانکشنی که در پست دیگری ارائه دادین
function mysql_real_escape_string_in($mysql_real_escape_string){
$search = array("\\","\0","\n","\r","\x1a","'",'"');
$replace = array("\\\\","\\0","\\n","\\r","\Z","\'",'\"');
return str_replace($search, $replace, $mysql_real_escape_string);
}
حل شد و فقط میخاستم بدونم چرا mysql_real_escape_string خروجیش 0 میشه که جواب دادین..... بسیار ممنون
نویسنده: فرشته
زمان: ۱۰:۰۲:۳۵ - تاریخ: ۱۳۹۳/۰۶/۰۶
سلام
من مدیریت یه سایت رو برعهده دارم که برنامه نویسیش از قبل نوشته شده و من فقط گاهی کمی اون رو ویرایش میکنم
اما چون سایت با mvc نوشته شده خیلی سخته و گاهی متوجه نمیشم سوالم اینه که چطوری باید عضویت کاربرم فقط 1 روز اعتبار داشته باشه؟ یعنی بعد یک روز اون کاربر حذف شه
راه حل خودم اینه که یه کوکی بسازم که 24 ساعت بعد بیاد از جدول کاربرام ، کاربر مورد نظر و حذف کنه. اما نمیدونم کد رو کجا و چطوری بنویسم
ممنون
پاسخ: 
سلام
کوکی در مرورگر کاربر ساخته می شود و لذا راه حل مناسبی برای این گونه موارد نیست!
برای ایجاد کاربران موقت باید یک ستون برای تاریخ عضویت داشته باشید و یک کد یا تابع که در فواصل زمانی معین توسط کاربران اجرا شود، این کد تاریخ فعلی را با تاریخ کاربران چک کرده و در صورت منقضی شدن زمان، اطلاعات آنها را حذف می کند، قاعدتا برای نوشتن این قابلیت باید با برنامه نویسی وب آشنا باشید، متاسفانه در این زمینه کمک بیشتری از دستمان ساخته نیست!
نویسنده: shokouhi70
زمان: ۱۸:۰۱:۲۳ - تاریخ: ۱۳۹۳/۰۶/۱۲
با سلام خدمت اساتید محترم سایت وبگو
من یه سوالی دارم که مربوط به پنل ادمین و سشن هاست
زمانی که در منوی ادمین دکمه ای را کلیک کنیم میخواهیم که در زیر آن منو قسمت مربوط به دکمه نشان داده شود مانند عکس زیر :
http://s5.picofile.com/file/8138718784/11.png
و عکس کد :
http://s5.picofile.com/file/8138719868/Desktop_9_3_2014_5_43_20_PM_872.jpg
ممنون میشم اگه کمک کنید
پاسخ: 
سلام
سوالتان خیلی مبهم است! تصاویرتان گویا نیست!
در حد برداشت ما، قاعدتا باید این مورد را طراحی کنید، پاسخ ساده و کوتاهی ندارد، باید مطابق نیازتان خوجی را از دیتابیس گرفته و به صورت HTML چاپ کنید، در واقع ترکیبی از PHP، HTML و CSS مورد نیاز است.
نویسنده: shokouhi70
زمان: ۰۷:۱۹:۴۴ - تاریخ: ۱۳۹۳/۰۶/۱۳
با سلام دوباره خدمت شما اساتید محترم سایت وبگو
من میخواهم که در پنل مدیریتم یه قسمت داشته باشم برای منو و یه قسمت که اطلاعات حاوی هر دکمه منو را در آن قسمت نشان دهد و مشکل من این است که اگر از این کد استفاده کنم در لینک منو :
?pt=students
در عکس :
http://s5.picofile.com/file/8138718784/11.png
باعث میشه که این مقدار رو به همون صفحه مدیریت بفرسته ولی این کار باعث میشه که ارور سشن undefined رو به من بده به خاطر همین نمیدونستم باید چیکار کنم که این مشکل سشن را در همان صفحه مدیریت حل کنم
ممنون میشم کمکم کنید
پاسخ: 
سلام
به این صورت در هیچ سایتی نمی توانید پاسخ مشکلتان را پیدا کنید! حل آن نیاز به تست و بررسی دقیق هدف و ساختار کدهای شما دارد، متاسفانه صرف شرح ماجرا کمکی نمی کند.
نویسنده: مهدی
زمان: ۲۰:۵۱:۱۷ - تاریخ: ۱۳۹۳/۰۶/۱۵
قدردان زحماتتان. موفق باشید.
نویسنده: هادی
زمان: ۰۰:۰۳:۴۴ - تاریخ: ۱۳۹۳/۱۱/۲۲
خدا خیرتون بده به قران بزرگترین سایت اموزشی همین سایت است ممنون خیلیییییییییییییییییییییییییی
نویسنده: هیوا
زمان: ۰۴:۵۱:۵۳ - تاریخ: ۱۳۹۴/۰۲/۰۸
با سلام و تشکر از سایت بسیار عالیتون
چطور میشه یه ادمین ساخت مثلا یه انجمن ساختیم و خودم ادمین باشم و موضوع برای بحث بسازم یعنی فقط ادمین اجازه دسترسی به صفحه های خاص داشته باشه ، بخصوص قسمت مای اسکیو ال
ممنون و بازم ممنون
پاسخ: 
سلام
لطفا از طرح سوالات کلی خودداری کنید! ساخت یک برنامه کاربردی تحت وب نیازمند طی روال از مقدمات است که در این صورت پاسخ سوالتان روشن خواهد بود، بسته به نحوه تعریف ساختار برنامه می توان ستون هایی برای تعیین سطح کاربران تعریف کرد و در کدنویسی PHP کار، قبل از چاپ خروجی یا امکانات، ابتدا دسترسی کاربران را بررسی و سپس خروجی متناسب را چاپ کرد (به عبارتی باید با نوشتن برنامه های داینامک با PHP آشنا باشید!).
نویسنده: maryam
زمان: ۱۷:۵۷:۱۵ - تاریخ: ۱۳۹۴/۰۳/۰۶
سلام مرسی از سایت خوبتون ، یه سوال می خواستم بدونم
setcookie(session_name(),session_id(), time() + $login_time, ("/"));
من باید ارگومان به session_name و session_id بفرستم یا نه همینطور فقط بنویسم؟!!
پاسخ: 
سلام
نیازی به تعریف آرگومان نیست، اما اگر قبل از شروع session_start با استفاده از session_name یک نام برای نشست خود تنظیم کنید، این نام در قسمت تنظیم کوکی به عنوان نام کوکی استفاده خواهد شد، نحوه تنظیم نام برای نشست:
<?php
session_name("My_Session");
session_start();
setcookie(session_name(),session_id(), time() + $login_time, ("/"));
?>
نویسنده: هادی
زمان: ۰۲:۴۹:۰۷ - تاریخ: ۱۳۹۴/۰۳/۲۳
سلام داداش شرمنده که اینجا سوالمو می پرسم
سایت رو که روی هاست آپلود می کنیم بعد برای اتصال به دیتابیس موجود روی هاست بابد
$connect=new PDO('mysql:host=localhost;dbname=sabt','root','');
localhost رو به لینک دیتابیس هاست تغییر بدیم یا لازم نیست.
داداش اگه میشه امروز تا قبل از ظهر پیام بده کارم گیره
ممنون
پاسخ: 
سلام
خیر، تغییر مورد نیاز درج نام کاربری و کلمه عبور متناسب با حساب کاربری دیتابیس شما در هاست است، معمولا نیاز به تغییر دیگری نیست!
more لطفا پیش از ارسال یادداشت نکات زیر را مد نظر داشته باشید:
- مواردی که به کلی خارج از موضوع این مطلب هستند را در فرم منوی "تماس با ما" مطرح و پاسخ را از طریق ایمیل دریافت کنید.
- به سوالات کلی، مبهم، غیرضروری و مشکلاتی که تلاشی برای رفع آن نکرده باشید پاسخ خاصی داده نخواهد شد.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین قرار دهید تا امکان تست و بررسی وجود داشته باشد.
- تمام یادداشت ها بررسی و برای هر کاربر زمان مشخصی جهت پاسخگویی در نظر گرفته می شود، لذا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.




2 × 2
 refresh
نکته:
با توجه به تاریخ نگارش آموزش های سایت و پیشرفت تکنولوژی های مرتبط با وب در سالیان اخیر، محتوای برخی از مطالب قدیمی ممکن است نیاز به ویرایش و به روزرسانی داشته باشد که این کار هم زمان با تهیه نسخه جدید «وبگو» به مرور در حال انجام است، لطفا در استفاده از مطالب سایت به این نکته دقت داشته و حتی المقدور از چند منبع مختلف استفاده نمائید.
آخرین دیدگاه ها
form adel
در:
سلام با تشکر از سایت خوب شما. یه سوال داشتم چگونه تمام این کدها را در جاوا اسکریپت همزمان قرار دهیم. من مثلا دستور این...
۲۱:۲۵:۴۰ ۱۳۹۸/۰۸/۲۴

form یه سوال کننده
در:
سلام. ببخشید چطور میشه ایمیل هایی رو میفرستن که ریپلای زدن رو ایمیلی که از طرف ما نبوده بیشتر تو تبلیغات دیدم امیدوارم منظورم و...
۰۳:۲۳:۰۸ ۱۳۹۸/۰۸/۲۴

form پرتو
در:
با عرض سلام و خسته نباشید امیدوارم حالتون خوب باشه من دو سه سال پیش وبلاگم رو حذف کردم ایا امکانش هست برگرده؟ ادرس...
۱۴:۵۵:۵۲ ۱۳۹۸/۰۸/۲۰

form علی
در:
سلام من نمی تونم html tag رو چطور در وبلاگم قرار بدم وبلاگم اینه
tagtak.blog.ir
۱۰:۲۳:۳۴ ۱۳۹۸/۰۸/۲۰

form حمید
در:
سلام. خسته نباشید. من میخاستم استایل فیلدهای فرمم رو تغییر بدم منتهی نمیدونم از چه کدهایی باید استفاده کنم. برای اینکه فرمی به شکل...
۱۰:۳۶:۱۹ ۱۳۹۸/۰۸/۱۹

form سمیه
در:
سلام ممنون بابت آموزش مفیدتون توی تگ ها هرچیزی که در تگ head قرار بگیره نمایش داده نمیشه، اما ممنون میشم...
۲۰:۴۹:۲۳ ۱۳۹۸/۰۸/۱۷

form استادمجازی
در:
سلام. از ادمین عزیز و همگی دعوت می کنم آموزش های خوبتون را بصورت آموزش ویدیویی یا صوتی و... در سایت ostadmajazi.com استادمجازی ...
۲۲:۱۲:۲۳ ۱۳۹۸/۰۸/۱۳

form mohamad
در:
سلام و خسته نباشید ، توی فرمی که ساختم چند تا drop down دارم که میخوام با php براشون شرط بذارم به طوری...
۱۳:۵۱:۳۴ ۱۳۹۸/۰۸/۱۰

form رضا
در:
خسته نباشید این جلسه آخر html بود؟؟؟؟
۰۱:۱۵:۰۷ ۱۳۹۸/۰۸/۱۰

form امیرمحمد
در:
سلام و خسته نباشید استاد بنده میخوام بین دو کد زیر که مشخص کردم رو به دست بیارم
// ---------------------set سلام...
۱۹:۳۰:۵۳ ۱۳۹۸/۰۸/۰۸

form حجت
در:
خیلی ممنونم از لطف شما. اوکی شد.
۱۰:۲۸:۳۵ ۱۳۹۸/۰۸/۰۶

form میلاد
در:
آشنایی نسبی با css, php و ajax دارم و نمیخام از library های موجود در نت استفاده کنم. خواستم با همین متد که انصافا روان...
۲۳:۲۲:۵۵ ۱۳۹۸/۰۸/۰۵

form عرفان
در:
با سلام. مدتی بود که بدلایل مشکلات زیاد نتونستم به وبلاگم رسیدگی کنم ولی وقتی برگشتم میبینم که هزاران بازدید داشتم و همشونم به زبان...
۲۲:۴۹:۴۴ ۱۳۹۸/۰۸/۰۵

form raha
در:
سلام وقتتون بخیر ببخشید علامت @ در کل به چه معناست ممنون میشم پاسخ دهید
۲۰:۱۲:۵۹ ۱۳۹۸/۰۸/۰۵

form میلاد
در:
باسلام تشکر از مطالب روان و پرکاربردتان. در خصوص آموزش مذکور، نحوه و ترفند نمایش محور عمودی در سمت چپ نمودار (مشابه...
۰۲:۳۸:۴۰ ۱۳۹۸/۰۸/۰۵