آموزش PHP   >   راهکارهای موثر در PHP > راهکار 1 : ثبت نام و شناسایی کاربران در وب سایت ها
بخش دوم - صفحه ورود Login Page

مقدمه :

اولین اسکریپتی که در این پروژه به بررسی آن خواهیم پرداخت ، صفحه login.php است . این صفحه را از پوشه پروژه  پیدا کرده و در یک برنامه ویرایش کدهای PHP باز کنید . شما می توانید این صفحه را در سرور مجازی بر روی کامپیوتر خود یا یک سرور PHP اجرا نموده و خروجی آن را مشاهده نمایید .
برای دریافت اطلاعات راجع به نحوه نصب و راه اندازی سرور مجازی PHP بر روی ویندوز به بخش آموزش مربوطه رجوع کنید .
خروجی این صفحه یک فرم ساده برای دریافت نام کاربری و رمز عبور جهت ورود login به سایت است . همانند تصویر زیر :

خروجی صفحه login.php

کد 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 بعد از آن دو حالت پیش می آید :

  1. اگر پایگاه داده مورد نظر پیدا نشد ، یک پیام خطا به متغیر خطای برنامه errorMessage$ اضافه می شود .
  2. در صورتی که پایگاه داده پیدا شد و اتصال به آن برقرار گردید ، به وسیله دستورات زیر تابع ( ) 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";
  }

                  مرحله قبلی                   مرحله بعدی


راجع این مطلب سوال یا اشکالی دارید ؟! آن را در انجمن سایت مطرح نمایید ...         >>>>>  ورود به انجمن تخصصی


نطر خودتان درباره این صفحه  :

آیا مطالب این صفحه برای شما مناسب و مفید بوده است :

نام :               
آدرس Email :  

نظر شما :      
سوال امنیتی : جمع سه + پنج چنده ؟