article

آموزش ساخت پنل ورود و خروج سایت با PHP و MySQL

mysql-php-login-logout

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

سشن (session) یا نشست چه کاربردی دارد؟


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

ساخت دیتابیس، ردیف ها و اطلاعات اعضاء


همانطور که گفتیم، آموزش فعلی، در ادامه مطلب گذشته بیان می شود، به این دلیل، نیاز به دیتابیس و اطلاعاتی از پیش ثبت شده داریم، بدین منظور می توانید مطلب زیر را مطالعه کنید:
آموزش ساخت فرم عضویت در سایت با php و mysql  

فرم html جهت ورود و خروج


همانطور که در آموزش مربوط به ساخت فرم عضویت در سایت با php و mysql ملاحظه کردید، در اینجا نیز به یک فرم html ساده جهت دریافت نام کاربری و کلمه عبور اعضاء، نیازمندیم، البته اگر چه این فرم به زبان html است، اما بهتر است پسوند فایل خود را به php ذخیره کنید، چرا که به دلیل کار با سشن و دریافت پاره ای اطلاعات از کاربر و به فرض نمایش پیام، در حالت ورود و خروج به سایت، به آن نیاز خواهیم داشت؛ لذا ابتدا فرم زیر را در یک فایل 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 />
<input type="hidden" name="check" value="sended" />
<input type="submit" value="ورود" />
</form>
</body>
</html>
توضیح:
- دوفیلد اصلی در فرم ما با نام های  username و password مشخص شده اند، فیلد مربوط به پسورد از نوع password است تا کلمه عبور کاربر به شکل حفاظت شده ای وارد شود.
- اطلاعات این فرم به فایل فرضی login.php با متد post ارسال می شود.
- فیلد مخفی با نام فرضی check، جهت اطمینان از ارسال فرم توسط کاربر و اختیاری است.

فایل login.php جهت بررسی ورود و خروج کاربر


پس از اینکه کاربر اطلاعات خود را ارسال می کند، داده ها و از جمله نام کاربری و کلمه عبور او باید با آنچه که در دیتابیس سرور وجود دارد تطبیق داده شود، از اینرو به برنامه ای به یک زبان سمت سرور نیاز خواهیم داشت که در اینجا php این کار را برایمان انجام خواهد داد، کد زیر یک نمونه را نشان می دهد.
<?php
//شروع یک نشست
session_start();
//دریافت و تنظیم متغیرهای ارسال شده توسط کاربر
@$username = $_POST['username'];
@$password = $_POST['password'];
@$check = $_POST['check'];
$check_error = 0;
?>
<!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>
<?php
//بررسی معتبر بودن اطلاعات ارسالی کاربر
//نام کاربری
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'];
        // اطلاعات کاربر صحیح است
        echo "شما به سایت وارد شده اید!<br />";
    }
    else{
        // اطلاعات کاربر صحیح نیست
        echo "اطلاعات وارد شده صحیح نیست!<br />";
    }
}
//پایان ارتباط با پایگاه داده  
mysql_close($con);
?>
</body>
</html>
توضیح:
- قبل از هر چیز، با تابع session_start یک نشست یا سشن را در صفحه تعریف می کنیم، دقت کنید که این تابع باید قبل از ارسال هر نوع خروجی به مرورگر، تنظیم شود در غیر اینصورت خطای Cannot modify header information - headers already sent را دریافت خواهید کرد.
- سپس مقادیر ارسالی کاربر از فرم را در متغیرهایی ذخیره می کنیم، تا در ادامه از آنها استفاده کنیم، در اینجا نام فیلد ها از اهمیت زیادی برخوردار است، چرا که متغیرها و مقادیر آنها بر اساس نام فیلد و متد post تعریف می شوند.
- قسمت مربوط به متغیر check، اختیاری است، صرفا به این جهت آن را قرار داده ایم که شما را با تکنیک ارسال مقادیر به صورت فیلدهای مخفی از فرم های وب آشنا کنیم، از این روش معمولا برای اعتبار سنجی یا حفظ امنیت داده ها استفاده می شود که خود یک بحث مفصل می طلبد.
- قسمت میانی کد بالا، شباهت زیادی به آنچه در آموزش ساخت فرم عضویت در سایت گفتیم دارد، با استفاده از بررسی دستورات شرطی if و else از خالی نبودن فیلدها اطمینان حاصل می کنیم.
- سپس اطلاعات اتصال به پایگاه داده را تعریف کرده، به طور مثال، برای سرور مجازی یا لوکال هاست معمولا از نام کاربری root و بدون پسورد استفاده می شود، نام پایگاه داده نیز، بستگی به خود شما و دیتابیسی دارد که پیش تر ساخته اید (دیتابیس را می توانید به صورت دستی در برنامه phpmyadmin بسازید).
- بعد از اتصال موفقیت آمیز به پایگاه داده، متغیر های نام کاربری و کلمه عبور را با دو تابع mysql_real_escape_string و md5 به نوعی ایمن سازی می کنیم، تا هم از نفوذ احتمالی به پایگاه داده و هم از نام کاربری اعضاء سایت، حفاظت کرده باشیم، البته یادآور می شویم، توابع عنوان شده صرفا جهت نمونه و برای برنامه های عادی است، شما می توانید از روش ها و توابع پیچیده تری نیز برای افزایش ضریب امنیت استفاده کنید.
- اکنون با دستور SELECT * FROM  بررسی می کنیم تا ببینیم، آیا کاربری با این مشخصات در دیتابیس ما وجود دارد یا خیر، اگر تعداد فیلد های انتخاب شده بزرگتر از یک باشد (mysql_num_rows تعداد ردیف های نتایج یک پرس و جو را نشان می دهد)، پس چنین کاربری وجود دارد، در غیر اینصورت پیام خطا نشان داده خواهد شد.
- اگر کاربر مشخصات را صحیح وارد کرده باشد، دو متغیر به صورت superglobal برای کار با توابع سشن (session) تنظیم می کنیم، متغیر نام کاربری و کلمه عبور، از این دو متغیر در هنگامی که کاربر صفحات سایت را مرور می کند، برای بررسی معتبر بودن ورود او، استفاده خواهیم کرد.
- در نهایت نیز اتصال به پایگاه داده را با تابع mysql_close خاتمه می دهیم.

نحوه استفاده از سشن (session) در صفحات مختلف


اکنون که کاربر با موفقیت وارد سایت شد و دو متغیر برای کار با سشن ها تعریف کردیم (به صورت superglobal یعنی کافی است یک بار متغیر را در کدمان تعریف کنیم، آنگاه در تمام صفحات آن را در اختیار خواهیم داشت و نیازی به دریافت مجدد و تعریف دوباره متغیر نیست)، برای هر صفحه از سایتمان باید بررسی کنیم تا ببینیم این دو متغیر (سشن username و سشن password) تنظیم شده اند یا خیر، این کار را با یک بررسی ساده بر مبنای isset در php انجام می دهیم.
<?php
//شروع یک نشست
session_start();
//بررسی تنظیم شدن یا نشدن متغیرهای سشن
if (!isset($_SESSION['username']) || !isset($_SESSION['password'])){
//در صورتی که متغیرهای سشن تنظیم نشده باشند، کاربر مجاز به دیدن ادامه صفحه نیست و او را به صفحه اصلی منتقل می کنیم
header("location:index.php");     
}
?>

دکمه خروج از سایت


برای ساخت یک دکمه خروج، هنگامی که کاربر وارد سایت می شود، ابتدا یک فایل با نام فرضی logout.php بسازید و سپس با یک فرم ساده html آن را فراخوانی کنید، مثال زیر گویا است.
محتویات فایل logout.php:
<?php
//شروع یک نشست
session_start();
//منقضی کردن متغیر های نشست
unset($_SESSION['username']);
unset($_SESSION['password']);
//پایان نشست
session_destroy();
//انتقال به صفحه اصلی یا صفحه مورد نظر
header("location:index.php");
?>
توضیح:
- همانطور که ملاحظه می کنید، در اینجا از unset برای منقضی کردن متغیرهای سشن استفاده کرده ایم.
- با تابع session_destroy یک نشست را به پایان می بریم و برای ورود مجدد کاربر، نیاز به ارسال نام کاربری و کلمه عبور است.
محتویات فرم و دکمه ساده html جهت خروج:
<form action="logout.php" method="post">
<input type="submit" value="خروج" />
</form>
توضیح:
- این فرم صرفا فایل logout.php را فراخوانی می کند و با فراخوانی آن فایل، سشن به طور کامل منقضی می شود.
- با کمی آشنایی با این روش، می توانید ایده های جالبی تعریف کنید، مثلا پیام های خوش آمد گویی و خروج به کاربر نشان دهید، یا از نام او که در متغیر سشن username وجود دارد، به فرض برای نمایش نام کاربری استفاده کنید.
مبحث مربوط به سشن ها ممکن است در نگاه اول کمی پیچیده به نظر برسد، به همین جهت در این مطلب به همین حد اکتفا می کنیم و در آموزش های بعدی، خواهیم دید که چگونه می توان امکانات جانبی بیشتری به فرم ورود و خروج کاربر به سایت، افزود.
sectionدسته بندی: آموزش کاربردی » MySQL
related مطالب بیشتر:
» هوشمند سازی پنل ورود و خروج سایت
» آموزش حذف گروهی اطلاعات از MySQL با استفاده از چک باکس
» نحوه رسم چارت و نمودار آماری با PHP و MySQL
» تعویض کد امنیتی Captcha با Ajax و MySQL
» جستجو در مطالب سایت با استفاده از MySQL Full-Text
commentنظرات (۲۲۹ یادداشت برای این مطلب ارسال شده است)
more یادداشت های جدید بر اساس تاریخ ارسال در انتهای یادداشت های موجود نمایش داده می شوند.
نویسنده: حمید
زمان: ۲۲:۴۶:۱۶ - تاریخ: ۱۳۹۱/۱۲/۲۱
نمیشه با تابع date این کار رو انجام داد؟
یعنی کاربر اگه خواست ساعت مثلا 2 اخذ نوبت کنه بهش پیغام خطا بده
من فقط موندم چجوری date رو تعریف کنم
پاسخ: 
برای مقایسه زمان فعلی با زمان شروع و پایان، از نمونه کد زیر می توانید استفاده کنید.
<?php
$time_zone = 12600;//3:30 = ((60 * 60) * 3) + 1800
$start = date("Y-m-d 22:00:00", time() + $time_zone);//ساعت شروع از تاریخ فعلی
$end = date("Y-m-d 06:00:00", time() + $time_zone + 86400);//ساعت پایان در تاریخ فردا
$now = date("Y-m-d G:i:s", time() + $time_zone);//تاریخ فعلی

function ParseDate($date){
$date = str_replace('-', '', $date);
$date = str_replace(':', '', $date);
$date = str_replace(' ', '', $date);
return $date;
}

function IsBetween($start, $end, $now){
$start = ParseDate($start);
$end = ParseDate($end);
$now = ParseDate($now);
if(($now >= $start) && ($now <= $end)){
return TRUE;
}
return FALSE;
}

if(IsBetween($start, $end, $now)){
echo 'TRUE';
}
else{
echo 'FALSE';
}
?>
نکته: به جای تابع ParseDate از تابع strtotime نیز می توانید استفاده کنید.
نویسنده: حمید
زمان: ۲۳:۰۹:۱۳ - تاریخ: ۱۳۹۱/۱۲/۲۲
سلام ممنون از سایت خوبتون
من میخوام وقتی کاربر میاد نام کاربری و رمز عبورش رو میزنه تا وارد صفحه اخذ نوبت بشه اگه بین ساعت 10 شب تا 6 صبح نبود بهش پیغام بده
حالا این کدهایی که نوشتین رو باید کجا قرار بدم؟
ممنونم
پاسخ: 
سلام
کدهای نوشته شده تنها یک مثال از نحوه انجام این کار است و جهت راهنمایی شما در نوشتن برنامه مورد نظر، اینکه کجا و چگونه از آن استفاده کنید را باید خودتان انجام دهید و این کار نیاز به آشنایی با برنامه نویسی php و ویرایش سفارشی دستورات دارد.
نویسنده: حمید
زمان: ۰۰:۱۳:۲۸ - تاریخ: ۱۳۹۲/۰۱/۰۴
سلام من دارم سیستم نوبت دهی آنلاین طراحی میکنم میخوام تا 6 نفر فقط بتونن ثبت نام کنن و اگه نفر هفتم اومد واسه ثبت نام بهش پیغام خطا بده اینم کد من :
حذف شد
پاسخ: 
سلام
دوست گرامی ، لطفا از درج کدهای آماده طولانی خودداری کنید، تنها به سوالاتی پاسخ داده می شود که خودتان نیز بر روی آنها کار کرده و تا حدودی با چند و چون کار آشنا باشید.
نویسنده: سید
زمان: ۱۷:۰۱:۴۳ - تاریخ: ۱۳۹۲/۰۱/۰۴
سلام
چه جوری باید توی ومپ سرور فیلدی رو محدود کرد مثلا میخوام فیلد id رو محدود کنم که تا 6 بیشتر نشماره
پاسخ: 
سلام
ظاهرا این سوال نیز در راستای سوال قبلی شما پرسیده شده، به هر صورت برای این کار چند روش وجود دارد، می توانید با نمونه کد زیر بیشترین مقدار id را از جداول MySQL دریافت کنید، اگر برابر 6 (یا بزگتر) بود، اجازه ثبت مقادیر جدید را ندهید:
<?php
$sql = mysql_query("SELECT id FROM table ORDER BY id DESC LIMIT 1")
or die(mysql_error());
while($row = mysql_fetch_array($sql)){
$id = $row['id'];
}
if($id >= 6){
echo 'Error!';
}
else{
echo 'Ok!';
}
?>
روش دیگر استفاده از توابعی مانند MAX و COUNT در MySQL است.
نویسنده: سید
زمان: ۱۶:۰۵:۱۵ - تاریخ: ۱۳۹۲/۰۱/۰۵
سلام
توی کد زیر این خطا رو میده:
mysql_fetch_assoc() expects parameter 1 to be resource, boolean given
اینم کد من :
<?php
include 'mytools.php' ;
$servername="localhost";
$port = "3306";
$dbname = "dentist";
$user = "root";
$pass = "";
$link = mysql_connect($servername.":".$port,$user,$pass);
mysql_select_db($dbname,$link);
$sql = "select * from nobat where id = 1 and id = 2 id = 3 and id = 4 and id = 5 and id = 6 " ;
$result = mysql_query($sql,$link);
if(mysql_fetch_assoc($result))
{
print(redirect('reserve.php'));
}
else{
print(redirect('pay.php'));
}
?>
پاسخ: 
سلام
پرس و جوی شما صحیح نیست و لذا مقادیر FALSE را برمی گرداند، نمونه صحیح:
$sql = "select * from nobat where id = 1 OR id = 2 OR id = 3 OR id = 4 OR id = 5 OR id = 6 ";
یا در حالت بهتر و کوتاه تر:
$sql = "select * from nobat where id >= 1 AND id <= 6";
نویسنده: حسین
زمان: ۱۸:۵۵:۰۶ - تاریخ: ۱۳۹۲/۰۱/۰۷
ممنون خیلی جالب بود.
نویسنده: ali
زمان: ۰۰:۳۵:۱۶ - تاریخ: ۱۳۹۲/۰۱/۰۸
سلام
میخواستم با جاوااسکریپت اجازه ورود به سایت رو در بازه زمانی 7 صبح تا 10 شب بدم کدش رو لازم دارم ممنون
پاسخ: 
سلام
لطفا به سایت های دریافت اسکریپت آماده مراجعه کنید.
نویسنده: سید
زمان: ۱۳:۰۷:۰۸ - تاریخ: ۱۳۹۲/۰۱/۱۴
دوستان یک داینامیک تیبل ساختم که خبر رو درج کنه توی صفحه اصلی که با این پیغام مواجه شدم
MM_ERROR: MySQL Error#: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'fulltext FROM news' at line 1
مشکل از کجاست؟؟؟ مرسی
پاسخ: 
سلام
عبارت "fulltext" یک کلمه محافظت شده (reserved) در MySQL است و نمی توانید در پرس و جوی خود به عنوان مثال برای نام جداول یا ستون ها از آن استفاده کنید، به جای آن از یک عبارت دیگر استفاده کنید.
نویسنده: حمید
زمان: ۱۳:۱۴:۲۹ - تاریخ: ۱۳۹۲/۰۱/۱۴
سلام
نمیدونم چرا گاهی اوقات دریم ویور به ومپ سرور کانکت نمیشه ولی وقتی کامپیوتر رو ریست میکنم وصل میشه؟؟؟؟
پاسخ: 
سلام
پاسخ دقیق به سوال شما بدون تست سیستم امکان پذیر نیست، اما به طور کلی ممکن است از بارگذاری ناقص برنامه های مورد نیاز سیستم عامل جهت کار با پروتکل های شبکه باشد، ممکن است ویروس یا برنامه ای (مانند فایروال) مانع از اتصال شود.
قبل از ریست کامپیوتر، یک بار کلیه سرویس های WampServer را ریست کنید، سپس Dreamweaver را بسته و از نو اجرا نمائید، امکان دارد مشکل موقتی باشد و حل شود.
نویسنده: محمد مهدی
زمان: ۱۶:۱۹:۱۰ - تاریخ: ۱۳۹۲/۰۱/۱۴
سلام
اول از سایت بسیار خوبتون تشکر میکنم که خیلی ساده و روان آموزش میدین
فقط یک انتقاد که بعضی از آموزش ها به علت اینکه جای دقیق کد ها رو توضیح نمیدین برای برخی افراد مثل من که اصلا عادت به کد نویسی وب ندارند مشکله
لطفا اگر امکان داشته باشه جای قرار گیری کد ها رو توضیح بدین...
و در صورت امکان سورس رو هم در کنار آموزش ها قرار بدین برای افراد مبتدی
من برای کار پروژه دارم به زبان php که اصلا اشنایی بهش ندارم یک سایت معرفی محصولات شرکتی با قالبیت ثبت نام و ... طراحی میکنم
تخصص مم تحت ویندوز و vb است
من با کمک سایت شما و سایر سایت ها یک قالب بسیار شیک + چت روم و ثبت نام و تماس با ما درست کردم و مشکلاتی چون زبان فارسی رو هم برطرف کردم
در حال حاظر فقط با مشکل ورود به سایت وجود دارد که پیغام
اطلاعات وارد شده صحیح نیست!
رو میده با اینکه اصلا مشکلی در برقراری ارتباط با پایگاه داده وجود نداره
من نوع Collation رو utf8_persian_ci قرار دادم احتمالا داره به خاطر این مشکل به وجود آمده باشه؟
از راهنماییتون بسیار ممنونم
پاسخ: 
سلام
خیلی ممنون از انتقاد سازنده شما.
در مورد سوالی که عنوان کردید، باید ببینید مشکل تطبیق نداشتن اطلاعات از کجا است، یونیکد utf8 استاندارد است و دلیل مشکل نیست، به احتمال زیاد هنگام ثبت نام از تابع md5 یا توابع شبیه به آن برای کلمه عبور استفاده می کنید (که عبارت را رمزی می کند)، اما موقع تطبیق اطلاعات، کلمه عبور را با این تابع رمزی نمی کنید، به این دلیل ممکن است مشکل عدم تطابق اطلاعات ایجاد شود، خطایابی در PHP چندان سخت نیست، کافی است قبل از تطبیق با دیتابیس با یک دستور echo ساده از محتوای متغیرها خروجی بگیرید.
به جزء این مورد ممکن است دستورات شرطی در PHP یا نحوه تنظیم پرس و جوهای MySQL صحیح نباشد که باید آنها را نیز به دقت بررسی کنید.
نویسنده: محمد مهدی
زمان: ۱۲:۳۷:۳۳ - تاریخ: ۱۳۹۲/۰۱/۱۵
بله مشکل یه همچین چیزی بود که برطرف شد ممنون بابت راهنمایی
شاید سوال الان من مربوط به این آموزش نباشه
من به جای اینکه صفحه های زیادی درست کنم و در هر کدام جدا کدنویسی کنم برای راحتی کار میخواهم در یک پوشه مثلا www.domin.ir/admins یه سری صفحه مثلا برای مدیریت تبلیغات درست کردم و میخواهم در ادرس
www.domin.ir/admin.php با استفاده از دستور
include ("admins/ads.php");
اون رو فراخوانی کنم تا اینجای کار مشکلی نیست
ولی میخواهم فقط یه صفحه مدیریت باشه و با تعدادی دکمه که وقتی روی اون دکمه ها روی هر کدام کلیک شد هر کدام یکی از صفحه های پوشه ادمین را اینکلود کنه تا مجبور نباشم برای هر قسمت یک صفحه بسازم
اگر متوجه شدید راهنمایی کنید
با تشکر از شما دوست عزیز
پاسخ: 
در وب باید پارامترهای مد نظرتان را از طریق متد get به برنامه خود تفهیم کنید، به طور مثال:
www.domin.ir/admin.php?action=ads
در این مثال پارامتر action حاوی مقدار ads است که در کدهای PHP به شکل زیر قابل دریافت است:
$action = $_GET['action'];
و پس از دریافت مقدار پارامتر می توان ادامه برنامه را بر طبق آن نوشت:
switch($action){
case 'ads':
include_once('admin/ads.php');
break;
case 'users':
include_once('admin/users.php');
break;
default:
include_once('admin/admin.php');
}
در این مثال از switch و case استفاده کرده ایم، اما شما می توانید از روش های دیگری مانند استفاده از دستورات شرطی if و else استفاده کنید.
البته PHP از دو شیوه برنامه نویسی معمولی و شی گراء پشتیبانی می کند، در شیوه شی گراء روش های دیگری نیز (برای ایجاد محیط مدیریتی داینامیک) وجود دارد.
نویسنده: محمد مهدی
زمان: ۱۴:۵۷:۳۱ - تاریخ: ۱۳۹۲/۰۱/۱۵
از راهنمایی بسیار بسیار مفیدتون ممنونم
واقعا نمیدونم چه جوری ازتون تشکر کنم برخی آموزش ها اصلا توی گوگل نیست و یا حداقل ما نمیتونیم پیدا کنیم چون از بس سایت های اسپم با کلمات کلیدی با محتوای مختلف هست که آدم نمیتونه راحت چیزی پیدا کنه!
تنها سوال من راجع سایتتون هست اسکریپت سایتتون چیه؟
اگر خودتون نوشتین آیا تمایلی به ارائه اسکریپتتون به دیگران رو دارید؟
بیشتر جهت یادگیری برای دیگران
با تشکر
پاسخ: 
خواهش می کنیم، در مورد اسکریپت سایت، بله خودنوشت است، البته در حال حاضر قابلیت انتشار عمومی ندارد.
نویسنده: محمد مهدی
زمان: ۱۸:۴۴:۳۵ - تاریخ: ۱۳۹۲/۰۱/۱۵
حالا اگر بخواهیم با همین روش بر اساس id در تیبل نمایش بده چه کار کنیم؟
برای راه اندازی بخش اخبار سایت
www.domin.ir/admin.php?posts=news&id=1
سایت من تقریبا تمامی نیاز های اولیه یک وب سایت رو داره به جز همین اخبار سایت که اون هم به امید خدا به زودی تموم میشه
مطالب بسیار خوبی رو از سایت شما یاد گرفتم
با تشکر از لطفتون
پایدار باشید
پاسخ: 
پارامترهای موجود در لینک ها با استفاده از متد get قابل دریافت هستند، می توانید پارامتر id را به یک متغیر دیگر اختصاص دهید و از آن متغیر در کد خود استفاده کنید، مثال:
$id = mysql_real_escape_string($_GET['id']);
$query = mysql_query("SELECT id, title, post FROM news WHERE id='$id'") or die(mysql_error());
در نمونه فرضی بالا، ما ابتدا مقادیر پارامتر id را به متغیری با نام id اختصاص دادیم و به جهت استفاده در یک پرس و جوی دیتابیس، آن را با تابع mysql_real_escape_string ایمن سازی کردیم.
نکته: در حال حاضر PHP از سه روش جهت اتصال به پایگاه داده استفاده می کند (MySQL, PDO, MySQLi) که روش قدیمی و پایه همان توابع زیر مجموعه _mysql است.
نویسنده: محمد مهدی
زمان: ۲۰:۳۷:۵۴ - تاریخ: ۱۳۹۲/۰۱/۱۵
خیلی سعی کردم اما نتونستم مشکل رو پیدا کنم!
ایا این کد صحیح است؟
<?php
$id = mysql_real_escape_string($_GET['id']);
$query = mysql_query("SELECT id, title, post FROM news WHERE id='$id'") or die(mysql_error());

$akhbar = $_GET['akhbar'];

switch($akhbar){
case 'id':
echo "$query";
break;
default:
echo "no news";
}
?>
اسم بانک اطلاعاتی من : ory_test
نام تیبل : news
نام ردیف : post و title
ببخشید زیادی وقتتونو گرفتم
پاسخ: 
به نظر می رسد باید با مقدمات کار با mysql بیشتر آشنا شوید، قبل از انجام پرس و جو، ابتدا باید به دیتابیس متصل شوید، نکته دوم اینکه برای گرفتن خروجی از پرس و جو، از تابع mysql_fetch_array استفاده کنید که نمونه های آن در بخش آموزش مقدماتی mysql وجود دارد.
نویسنده: حمید
زمان: ۲۱:۰۶:۵۱ - تاریخ: ۱۳۹۲/۰۱/۱۵
سلام
من یه سایت نوبت دهی آنلاین طراحی کردم که یه صفحه پرداخت الکترونیک داره و یه صفحه نوبت دهی
کاربر بعد از پرداخت به صفحه نوبت دهی هدایت میشه
میخوام که به کاربر اجازه نده مستقیما با درج آدرس صفحه نوبت دهی در نوار آدرس وارد این صفحه نوبت دهی بشه
لطفا راهنمایی کنین
ممنون
پاسخ: 
سلام
به چند روش می توانید این حالت را ایجاد کنید، برای حالت موقت یک روش این است که به فرض بعد از پرداخت یک سشن آی دی با مقادیر نام کاربر یا یک مقدار hash ایجاد کنید، سپس او را ارجاع دهید، در صفحه مقصد ابتدا ست شدن این سشن آی دی را چک کنید، اگر ست شده بود، پس کاربر به صورت قانونی وارد صفحه شده و در غیر این صورت خیر، روش دیگر این است که یک فرم (با دکمه ارسال) در صفحه اول داشته باشید که مقادیری را از یک فیلد مخفی (hidden) به صفحه مقصد ارسال کند، در صفحه مقصد مقدار این فیلد مخفی را بررسی کنید.
برای ایجاد دسترسی همیشگی، یک ستون به عنوان وضعیت پرداخت برای کاربران در نظر بگیرید، آنهایی که پرداخت می کنند مقادیر به فرض 1 یا ok داشته باشند، سپس در ابتدای صفحه وضعیت کاربر را چک کنید.
more لطفا پیش از ارسال یادداشت نکات زیر را مد نظر داشته باشید:
- مواردی که به کلی خارج از موضوع این مطلب هستند را در فرم منوی "تماس با ما" مطرح و پاسخ را از طریق ایمیل دریافت کنید.
- به سوالات کلی، مبهم، غیرضروری و مشکلاتی که تلاشی برای رفع آن نکرده باشید پاسخ خاصی داده نخواهد شد.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین قرار دهید تا امکان تست و بررسی وجود داشته باشد.
- تمام یادداشت ها بررسی و برای هر کاربر زمان مشخصی جهت پاسخگویی در نظر گرفته می شود، لذا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.




9 × 7
 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 میلاد
در:
باسلام تشکر از مطالب روان و پرکاربردتان. در خصوص آموزش مذکور، نحوه و ترفند نمایش محور عمودی در سمت چپ نمودار (مشابه...
۰۲:۳۸:۴۰ ۱۳۹۸/۰۸/۰۵