کد خبر: 201
تاریخ انتشار: ۵ خرداد ۱۳۹۱ - ۱۲:۰۱

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

سطح مقاله: متوسط-پیشرفته
پیش نیاز: آشنایی با 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 == ۱) {
$password = mysql_result($result, ۰);
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 را که در قسمت ۱ نوشته بودیم را به صفحه ی خودمان می آوریم و سپس از تابع connect(); که خود در صفحه ی config.php نوشته بودیم استفاده می کنیم و به بانک اطلاعاتی متصل می شویم. سپس یک دستور کوئری که با استفاده از SELECT می باشد را در متغیر $sql قرار می دهیم این دستور باعث می شود که ببرسی کنید که آیا چنین پسوردی وجود داشته یا نه؟ سپس تابع mysql_query را می نویسیم که حاوی دستور و لینک می باشد و در متغیر $result می ریزیم و یک متغیر جدید به نام $numresult ایجاد می کنیم که در آن با استفاده از تایع mysql_num_rows که کاربرد آن این است که تعداد نتایج بدست آمده را در این متغیر قرار دهد به کاربر می بریم. یک شرط درست می کنیم که بررسی می کنید که آیا متغیر $numresult برابر ۱ می باشد یا نه؟ به این دلیل که دو نام کاربری برابر نمی تواند وجود داشته باشد. متغیری به نام $password ایجاد می کنیم و با استفاده از تابع mysql_result مقداری را که در دستور $result موجود است را بدست می آوریم. یک دستور کوئری دیگر در همان متغیر $sql ایجاد می کنیم این کوئری که دستور UPDATE می باشد برای ویرایش و تغییر می باشد همانطور که از اسمش معلوم است. با mysql_query این دستور در متغیر $sql را اجرا می کنیم و سپس با دستور echo پیام موفقیت با این عنوان که رمز عبور تغییر کرده را ارسال می کنیم و سپس کد PHP را می بندیم و به HTML بازمی گردیم و یک سرتیتر و یک متن ایجاد می کنیم که می گوید عملیات موفقیت آمیز نبود است و پسورد تغییر نکرده.
سعی کردم خیلی ساده بگویم برای اینکه با PHP آشنا شوید می توانید به تایپیک های این انجمن و سایت Rightclick.ir بروید تا PHP را بیاموزید.

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



نظرات بينندگان
انتشار يافته: بدون دیدگاه