آموزش PHP > راهکارهای موثر در PHP > راهکار 1 : ثبت نام و شناسایی
کاربران در وب سایت ها
بخش دوم - صفحه ورود Login Page
مقدمه :
اولین اسکریپتی که در این پروژه به بررسی آن خواهیم پرداخت ، صفحه login.php است .
این صفحه را از پوشه پروژه پیدا کرده و در
یک برنامه ویرایش کدهای PHP باز کنید .
شما می توانید این صفحه را در سرور مجازی بر روی کامپیوتر خود یا یک سرور PHP اجرا
نموده و خروجی آن را مشاهده نمایید .
برای دریافت اطلاعات راجع به نحوه نصب و راه اندازی سرور مجازی
PHP بر روی ویندوز به بخش آموزش مربوطه رجوع کنید .
خروجی این صفحه یک فرم ساده برای دریافت نام کاربری و رمز عبور جهت ورود login به سایت
است . همانند تصویر زیر :
کد HTML لازم برای تولید
فرم بالا را در انتهای صفحه login.php به صورت زیر مشاهده می کنید :
|
کد
|
<html>
<head>
<title> Basic Login Script </title>
</head>
<body>
<FORM NAME ="form1" METHOD ="POST" ACTION ="login.php">
Username: <INPUT TYPE = 'TEXT'
Name ='username' value="<?PHP print $uname;?>" maxlength="20">
Password: <INPUT TYPE = 'TEXT' Name ='password'
value="<?PHP print $pword;?>" maxlength="16">
<P align = center>
<INPUT TYPE = "Submit" Name
= "Submit1" VALUE = "Login">
</P>
</FORM>
<? PHP print $errorMessage; ?>
</body>
</html>
|
کد فوق یک کد ساده HTML است . نکته مهم در این بخش وجود یک دستور Print به زبان PHP
، پس از کدهای فرم HTML است . این دستور برای نمایش
و اعلام خطاهای احتمالی به کاربر قرار داده شده است . قسمت کد زیر :
|
کد
|
<? PHP print $errorMessage; ?>
|
در چند خط اول کد صفحه ، به معرفی متغیرهایی که در طول اسکریپت به آنها نیاز داریم
، به صورت زیر پرداخته شده است :
|
کد
|
$uname = " " ;
$pword = " " ;
$errorMessage = " " ;
$num_rows = 0 ;
|
متغیر errorMessage$ متغیر مهمی است و اگر در روند کار صفحه خطایی رخ دهد ، توضیحات
مربوط به خطا در این متغیر قرار گرفته و سپس می توان آن را به کاربر نمایش داد .
خط بعدی که یک دستور PHP است که هدف آن جلوگیری از حملات SQL Injection ، اتصال به
پایگاه داده و دریافت مقادیر از فرم ورودی ثبت نام است . در این بخش به تشریح خط به
خط این کد خواهیم پرداخت .
در قسمت اول ، یک دستور if چک می کند ، که آیا دستورات از طریق متد Post ارسال شده
اند ، یا خیر . در صورت ارسال شدن با متد Post ، مقادیر ورودی کاربر را از وی دریافت
کرده و سپس در متغیرهای مربوط ذخیره می کنیم . به صورت زیر :
|
کد
|
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$uname = $_POST['username'];
$pword = $_POST['password'];
}
|
در بخش دوم به وسیله دستورات زیر ، چک می کنیم که آیا مقادیر ورودی شامل کدهای HTML
یا اسکریپت نباشند
( در اصل حمله اسکریپتی رخ نداده باشد ) ، سپس مقادیر را دریافت می کنیم :
|
کد
|
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
...
$uname = htmlspecialchars($uname);
$pword = htmlspecialchars($pword);
...
}
|
سپس دستورات و متغیرهای لازم را برای اتصال به پایگاه داده به صورت زیر تعریف می کنیم
:
|
کد
|
$user_name = "root";
$pass_word = "";
$database = "login";
$server = "127.0.0.1";
$db_handle = mysql_connect($server, $user_name, $pass_word);
$db_found = mysql_select_db($database, $db_handle);
|
در بخش بعدی به بررسی پیدا شدن و اتصال موفق به پایگاه داده می پردازیم . اگر پایگاه
داده مورد نظر پیدا شود ، مقدار متغیر db_found$ به true تغییر کرده و در صورت عدم
موفقیت و اتصال به منبع داده ای ، مقدار آن false شده و بر حسب مقدار این متغیر در
دستور if بعد از آن دو حالت پیش می آید :
- اگر پایگاه داده مورد نظر پیدا نشد ، یک پیام خطا به متغیر خطای برنامه errorMessage$
اضافه می شود .
- در صورتی که پایگاه داده پیدا شد و اتصال به آن برقرار گردید ، به وسیله دستورات زیر
تابع ( ) quote_smart را فراخوانی کرده و مقادیر ورودی کاربر را به تابع ارسال می کنیم
. به صورت زیر :
|
کد
|
$uname = quote_smart($uname, $db_handle);
$pword = quote_smart($pword, $db_handle);
|
سپس با نام کاربری و رمز عبور وارد شده ، یک
دستور SQL ، را برای شناسایی کاربر ایجاد می کنیم . به وسیله دستور زیر بررسی
می کنیم آیا کاربری که نام کاربری و رمز عبور خود را وارد کرده در پایگاه داده اعضای
سایت وجود دارد یا خیر . اگر وجود داشت ، اطلاعات آنها را در متغیر SQL$ می ریزیم .
به صورت زیر :
|
کد
|
$SQL = "SELECT * FROM login WHERE L1 = $uname AND L2 = $pword";
|
سپس محتویات متغیر SQL$ را به وسیله یک query در متغیر دیگری به نام result$ قرار می
دهیم .
در صورتی که برنامه مورد مشابهی با نام کاربری و رمز وارد شده در جدول پیدا کند ، مقدار
متغیر result$ به true تغییر کرده و نشان می دهد که کاربر قبلا در جدول ثبت شده است
.
ولی اگر مورد مشابهی پیدا نکند ، مقدار متغیر result$ به false تغییر کرده و یک پبام
خطا به متغیر errorMessage$ اضافه می شود .
در نهایت به وسیله تابع ( ) mysql_num_rows ، می توانیم متوجه شویم که چند رکورد در
متغیر result$ قرار دارد . اگر تعداد این رکوردها از صفر بیشتر باشد ، مشخص می کند
که کاربر در سایت عضو است و پیام عضویت به وی صادر می شود .
اما اگر مقدار رکوردها صفر یاشد ، یک پیام خطا به متغیر errorMessage$ اضافه می شود
تا ایراد کار را به کاربر اعلام کند . کد این بخش به صورت زیر است :
|
کد
|
if ($num_rows > 0) {
$errorMessage= "logged on ";
}
else {
$errorMessage= "Invalid Logon";
}
|
راجع این مطلب
سوال یا اشکالی دارید ؟! آن را در انجمن سایت مطرح نمایید ...
>>>>> ورود به انجمن تخصصی
نطر خودتان درباره این صفحه :