تغيير پسورد :: سيستم مديريت محتوا قسمت 3

به نام خداوند بخشنده ي مهربان

سطح مقاله: متوسط-پيشرفته
پيش نياز: آشنايي با PHP و دستورات SQL SERVER

در جلسات قبل سيستم هاي ثبت نام و لاگين را طراحي كرديم. در جلسه ي قبل كه سيستم لاگين را طراحي مي كرديم اگر شرط درست بود و نام كاربري و رمز عبور صحيح بود به صفحه ي users.php هدايت مي شديم. در اين جلسه به طراحي صفحه ي users.php و changepass.php كه براي تغيير رمز عبور مي باشد خواهيم پرداخت. توجه داشته باشيد سيستم هاي مديريت محتوا داراي اين چنين ظاهري نيستند. براي قالب ها بايد از زبان آسان CSS استفاده نماييم كه با كد HTML مخلوط مي باشد، اما در اين آموزش با گرافيك كار نمي كنيم و فقط از دستورات HTML و PHP استفاده خواهيم كرد.
امروز ساخت سيستم تغيير رمز عبور را پيش خواهيم برد.
اول از همه صفحه ي users.php: كنترل پنل كاربر
اين صفحه بيشترش HTML هست اما با پسوند .php مشخص مي شود.
كد كامل صفحه ي users.php: (توضيح مي دم)

کد PHP:
<?php
session_start();
If(!isset($_SESSION["user")) {
Die('You are not login.');
}
?>
<html>
<head>
<title> user control panel! </title
</head>
<body>
<center>
<a href="sendpost.php"> New POST </a>
<a href="changepass.php"> Change Password </a>
<a href="delacount.php"> Delete Acount </a>
<a href="logout.php"> Logout </a>
</center>
</body>
</html>

اول كار كه مشخص مي كنيم كه آيا جلسه ي user وجود دارد يا نه تا از لاگين كردن يا نكردن كاربر باخبر شويم. سپس وقتي تگ PHP را مي بنديم يك صفحه ي HTML ساده مي بينيم كه چند لينك به صفحات ديگر دارد كه امكاناتي را براي كاربر فراهم مي كند.
بعدش در صفحه ي changepass.php:
شايد تعجب كرده باشيد كه چرا ما اين صفحه را با پسوند .php مشخص كرده ايم. اين صفحه درست است كه حاوي يك فرم ساده است اما براي اينكه مشخص شود يك كاربر به اين صفحه مراجعه كرده بايد از PHP استفاده نماييم.
كد كامل صفحه ي changepass.php: (توضيح مي دم)

کد PHP:
<?php
session_start();
If(!isset($_SESSION["user")) {
Die('You are not login.');
}
?>
<html>
<head>
<title> Change Password </title>
</head>
<body>
<form method="POST" action="changepass2.php">
Old password: <input  type="text" size="20" name="oldpassword">
New password: <input type="text" size="20" name="newpassword">
<input type="submit" value="Change Password">
</form>
</body>
</html>

در كد بالا كه مربوط به صحفه ي ChangePass.php مي باشد در ايتدا با استفاده از ساختار شرطي و با استفاده از تابع isset دريافت مي كنيم كه آيا اصلا جلسه اي به نام user ايجاد شده است يا نه؟ اگر ايجاد نشده معلومه كه كاربر لاگين نكرده و به همين خاطر با استفاده از دستور die يك پيام ساده ارسال مي كنم و اجراي كد را هم به پايان مي رسانم وقتي كد PHP را هم بستيد يك صفحه ي HTML ساده مي بينيد كه يك فرم حاوي ورودي هاي مختلف است. اگر توجه داشته باشيد action فرم را برابر changepass2.php قرار داديم. Changepass2.php براي پردازش اطلاعات و براي تغيير رمز عبور مورد استفاده قرار مي گيرد.
نوبت صفحه ي changepass2.php : تغيير رمز عبور نهايي
كد كامل صفحه changepass2.php (توضيح مي دم):

کد PHP:
<?php
session_start();
If(!isset($_SESSION["user"])) {
Die('You are not login.');
}
If(!isset($_POST["oldpassword"])) {
Die('The form not submited');
}
If(empty($_POST["oldpassword"])) {
Die('The old password field is empty.');
}
If(empty($_POST["newpassword"])) {
Die('The new password field is empty.');
}
$oldpassword = $_POST["oldpassword"];
$newpassword = $_POST["newpassword"];
$username = $_SESSION["username"];
Inculde('config.php');
Connect();
$sql = "SELECT `password` FROM `users` WHERE `username` = '$username';";
$result = mysql_query($sql, $connect) or die(mysql_error());
$numresult = mysql_num_rows($result);
If ($numresult == 1) {
$password = mysql_result($result, 0);
If ($password == $oldpassword) {
$sql = "UPDATE  SET  `password` = '$newpassword' WHERE `username` = '$username' and `password` = '$oldpassword`;";
mysql_query($sql , $connect) or die(mysql_error());
echo "The password changed";
}
}
?>
<h1> ERROR! </h1>
The password not changed because the old password is wrong.

و حالا توضيح صفحه ي changepass2.php:
در ابتدا همانطور كه در همه ي صفحات امروز بود از يك شرط به همراه isset استفاده مي كنيم كه بررسي كنيم كه جلسه اي ايجاد شده و يا نه و با اين عمل ورود كاربر را بررسي مي كنيم و در صورتي كه لاگين نكرده بود اخطار مي دهيم. در سطر هاي بعدي بررسي مي كنيم كه آيا فرم ارسال شده و يا نه و اگر ارسال نشده اخطار مي دهيم و سپس با اسفتاده از تابع empty در يك شرط ببرسي مي كنيم كه آيا مقادير فرم كه شامل oldpassword و newpassword مي باشند آيا خالي هستند يا نه و اگر خالي بودند پيغام خطا نمايش مي دهيم. سپس مقادير ارسال شده را در متغير هاي مختلف قرار مي دهيم تا بتوانيم از آنها استفاده كنيم. اما در يك متغيري به نام username چيز ديگري به كار برديم و به جاي اينكه از $_POST استفاده كنيم از $_SESSION كه براي جلسه ها بكار مي رود، استفاده كرده ايم. اگر بياد داشته باشيد در صفحه ي login.php فبل از اينكه جلسه ي ورود كاربر يعني user را ايجاد كنيم يك جلسه ي ديگر به نام username با مقداري كه متغير $username را در برداشت، ارسال كرديم اين جلسه به ما در اين سيستم مديريت محتوا براي شناسايي بسيار كمك مي كند، خواهيد ديد. در ادامه … فايل config.php را كه در قسمت 1 نوشته بوديم را به صفحه ي خودمان مي آوريم و سپس از تابع connect(); كه خود در صفحه ي config.php نوشته بوديم استفاده مي كنيم و به بانك اطلاعاتي متصل مي شويم. سپس يك دستور كوئري كه با استفاده از SELECT مي باشد را در متغير $sql قرار مي دهيم اين دستور باعث مي شود كه ببرسي كنيد كه آيا چنين پسوردي وجود داشته يا نه؟ سپس تابع mysql_query را مي نويسيم كه حاوي دستور و لينك مي باشد و در متغير $result مي ريزيم و يك متغير جديد به نام $numresult ايجاد مي كنيم كه در آن با استفاده از تايع mysql_num_rows كه كاربرد آن اين است كه تعداد نتايج بدست آمده را در اين متغير قرار دهد به كاربر مي بريم. يك شرط درست مي كنيم كه بررسي مي كنيد كه آيا متغير $numresult برابر 1 مي باشد يا نه؟ به اين دليل كه دو نام كاربري برابر نمي تواند وجود داشته باشد. متغيري به نام $password ايجاد مي كنيم و با استفاده از تابع mysql_result مقداري را كه در دستور $result موجود است را بدست مي آوريم. يك دستور كوئري ديگر در همان متغير $sql ايجاد مي كنيم اين كوئري كه دستور UPDATE مي باشد براي ويرايش و تغيير مي باشد همانطور كه از اسمش معلوم است. با mysql_query اين دستور در متغير $sql را اجرا مي كنيم و سپس با دستور echo پيام موفقيت با اين عنوان كه رمز عبور تغيير كرده را ارسال مي كنيم و سپس كد PHP را مي بنديم و به HTML بازمي گرديم و يك سرتيتر و يك متن ايجاد مي كنيم كه مي گويد عمليات موفقيت آميز نبود است و پسورد تغيير نكرده.
سعي كردم خيلي ساده بگويم براي اينكه با PHP آشنا شويد مي توانيد به تايپيك هاي اين انجمن و سايت Rightclick.ir برويد تا PHP را بياموزيد.

Hadimir
محمد هادي معصومي

نظرات کاربران :

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

این سایت از اکیسمت برای کاهش هرزنامه استفاده می کند. بیاموزید که چگونه اطلاعات دیدگاه های شما پردازش می‌شوند.