За последние 24 часа нас посетили 55689 программистов и 1708 роботов. Сейчас ищут 1024 программиста ...

регистрация и авторизация

Тема в разделе "PHP для новичков", создана пользователем sc2r2bey, 26 май 2009.

  1. sc2r2bey

    sc2r2bey Активный пользователь

    С нами с:
    25 апр 2009
    Сообщения:
    76
    Симпатии:
    0
    вот сделал простую авторизацию с регистрацией, прошу указать на недочеты и слабости скрипта.

    регистрация
    форма
    Код (Text):
    1.  
    2. <?php
    3. //включаем сессию
    4. session_start();
    5. //подключаем БД
    6. include 'include/configuration.php';
    7. $_SESSION['id'] = session_id();
    8.  
    9. if ($_SESSION['error']==2)
    10. {
    11.     echo "<div id=\"error\"><img src=\"media/attention.gif\" width=\"24\" height=\"24\" alt=\"ошибка ввода\"/> Ошибка ввода!<br /><br />";
    12.     $login_error_set = $_SESSION['login_error_set'];
    13.     $email_error_set = $_SESSION['email_error_set'];
    14.     $password_error_set = $_SESSION['password_error_set'];
    15.  
    16.     //сообщения об ошибках
    17.  
    18.     //ошибки ввода логина
    19.     switch ($login_error_set)
    20.         {
    21.             case(1):
    22.             echo ERROR_LOGIN_1;
    23.             break;
    24.             case(2):
    25.             echo ERROR_LOGIN_2;
    26.             break;
    27.             case(4):
    28.             echo ERROR_LOGIN_4;
    29.             break;
    30.             case(5):
    31.             echo ERROR_LOGIN_5;
    32.             break;
    33.             case(6):
    34.             echo ERROR_LOGIN_6;
    35.             break;
    36.             case(8):
    37.             echo ERROR_LOGIN_8;
    38.             break;
    39.         }
    40.  
    41.     //ошибки ввода e-mail
    42.     switch ($email_error_set)
    43.         {
    44.             case(1):
    45.             echo ERROR_EMAIL_1;
    46.             break;
    47.             case(2):
    48.             echo ERROR_EMAIL_2;
    49.             break;
    50.             case(3):
    51.             echo ERROR_EMAIL_3;
    52.             break;
    53.             case(4):
    54.             echo ERROR_EMAIL_4;
    55.             break;
    56.         }
    57.  
    58.     //ошибки ввода пароля
    59.     switch ($password_error_set)
    60.         {
    61.             case(1):
    62.             echo ERROR_PASSWORD_1;
    63.             break;
    64.             case(2):
    65.             echo ERROR_PASSWORD_2;
    66.             break;
    67.             case(3):
    68.             echo ERROR_PASSWORD_3;
    69.             break;
    70.         }
    71. }
    72. else
    73. {
    74.     echo "<div>";
    75. }
    76. echo "<br /><br /></div>";
    77. ?>
    78.  
    79. <!--форма регистрации-->
    80. <form action="registration.php" method="POST">
    81. <table border="0">
    82.  
    83.         <tr>
    84.             <td>Имя пользователя(логин): </td>
    85.             <td><input type="text" name="login" value="<?php if(isset($_SESSION['login'])) echo $_SESSION['login']; ?>" size="25" /></td>
    86.         </tr>
    87.         <tr>
    88.             <td>E-mail: </td>
    89.             <td><input type="text" name="email" value="<?php if(isset($_SESSION['email'])) echo $_SESSION['email']; ?>" size="25" /></td>
    90.         </tr>
    91.         <tr>
    92.             <td>Пароль: </td>
    93.             <td><input type="password" name="password" value="" size="25" /></td>
    94.         </tr>
    95.         <tr>
    96.             <td>Пароль еще раз: </td>
    97.             <td><input type="password" name="password2" value="" size="25" /></td>
    98.         </tr>
    99.         <tr>
    100.             <td colspan="2" align="right"><input type="submit" value="зарегестрировать" name="submit" /></td>
    101.         </tr>
    102.  
    103. </table>  
    104. </form>
    проверка формы
    Код (Text):
    1.  
    2. <?php
    3. //включаем сессию
    4. session_start();
    5.  
    6. //подключаем БД
    7. include 'include/configuration.php';
    8.  
    9. //Проверка переходa со страницы авторизации
    10. if(isset($_POST['login']))
    11. {
    12.  
    13.     //Сравниваем переданный идентификатор из формы с текущим идентификатором сессии
    14.     if($_SESSION['id'] != session_id())
    15.         {
    16.             exit("$error");
    17.         }
    18.  
    19.     //проверяем логин
    20.     $login = $_POST['login'];
    21.     $login_error_set = 0;
    22.  
    23.     $llen = strlen($login);
    24.     if($llen < 2 )
    25.         $login_error_set |= LOGIN_TooSmal;
    26.  
    27.     if($llen > 22)
    28.         $login_error_set |= LOGIN_TooBig;
    29.  
    30.     if(!preg_match("|^[-0-9a-z_\.]+$|i",  $login))
    31.         $login_error_set |= LOGIN_InvalidChars;
    32.  
    33.     $e_login = mysql_escape_string($login);
    34.     if(mysql_result(mysql_query("SELECT COUNT(*)  FROM user WHERE login='$e_login' "), 0) !== '0')
    35.         $login_error_set |= LOGIN_AlreadyRegistered;
    36.  
    37.     $_SESSION['login_error_set'] = $login_error_set;
    38.  
    39.     unset($_SESSION['login']);
    40.     if ($login_error_set == 0) $_SESSION['login']=$login;
    41.    
    42.     //проверяем e-mail
    43.     $email = $_POST['email'];
    44.     $email_error_set = 0;
    45.  
    46.     $elen = strlen($email);
    47.     if($elen < 1 )
    48.         $email_error_set |= EMAIL_TooNo;
    49.  
    50.     if(!preg_match("|^[-0-9a-z_\.]+@[-0-9a-z\.]+\.[a-z]{2,6}$|i",  $email))
    51.         $email_error_set |= EMAIL_InvalidChars;
    52.  
    53.     $e_email = mysql_escape_string($email);
    54.     if(mysql_result(mysql_query("SELECT COUNT(*)  FROM user WHERE email='$e_email' "), 0) !== '0')
    55.         $email_error_set |= EMAIL_AlreadyRegistered;
    56.  
    57.     $_SESSION['email_error_set'] = $email_error_set;
    58.  
    59.     unset($_SESSION['email']);
    60.     if ($email_error_set == 0) $_SESSION['email']=$email;
    61.  
    62.     //проверяем пароль
    63.     $password = $_POST['password'];
    64.     $password_error_set = 0;
    65.  
    66.     $plen = strlen($password);
    67.     if($plen < 1 )
    68.         $password_error_set |= PASSWORD_TooNo;
    69.  
    70.     if($password != $_POST['password2'])
    71.         $password_error_set |= PASSWORD_NotEqual;
    72.  
    73.     $_SESSION['password_error_set'] = $password_error_set;
    74.  
    75.     if($login_error_set!=0 || $email_error_set!=0 || $password_error_set!=0)
    76.         {
    77.             $_SESSION['error']=2;
    78.             echo"<META HTTP-EQUIV='Refresh' CONTENT='0; URL=index.php'>";
    79.         }
    80.     else
    81.         {
    82.             session_unset();
    83.             $_SESSION['error']=1;
    84.             $_SESSION['login']=$login;
    85.             $password = md5(md5($password));
    86.             $save_user = "INSERT INTO user VALUES('', '".$login."', '".$email."', '".$password."')";
    87.  
    88.     if (mysql_query($save_user))
    89.         {
    90.             echo "Данные успешно добавлены!<br />";
    91.             echo"<META HTTP-EQUIV='Refresh' CONTENT='1; URL=login.php'>";
    92.         }
    93.         }
    94. }
    95. else
    96.     {
    97.         exit ("$error");
    98.     }
    99. ?>
    авторизация
    Код (Text):
    1.  
    2. <?php
    3. //включаем сессию
    4. session_start();
    5. //подключаем БД
    6. include 'include/configuration.php';
    7. $_SESSION['id'] = session_id();
    8. $url=$_SERVER['PHP_SELF'];
    9. $filename = basename($url);
    10. $_SESSION['url'] = "$filename";
    11. if ($_SESSION['error']==1)
    12.     {
    13.         echo "<div id=\"congratulate\"><img src=\"media/congratulate.gif\" width=\"24\" height=\"24\" alt=\"поздравляем!\"/> Поздравляем, теперь Вы можете авторизоваться!<br /><br /></div>";
    14.     }
    15. ?>
    16.  
    17. <!--форма регистрации-->
    18. <form action="authorization.php" method="POST">
    19. <table border="0">
    20.  
    21.         <tr>
    22.             <td>Имя пользователя(логин): </td>
    23.             <td><input type="text" name="login" value="<?php if($_SESSION['login'] == 0) echo $_SESSION['login']; ?>" size="25" /></td>
    24.         </tr>
    25.         <tr>
    26.             <td>Пароль: </td>
    27.             <td><input type="password" name="password" value="" size="25" /></td>
    28.         </tr>
    29.         <tr>
    30.             <td colspan="2" align="right"><input type="submit" value="войти" name="submit" /></td>
    31.         </tr>
    32.  
    33. </table>
    34. </form>
    проверка формы
    Код (Text):
    1. <?php
    2. //включаем сессию
    3. session_start();
    4. $filename = $_SESSION['url'];
    5. echo $filename;
    6. //подключаем БД
    7. include 'include/configuration.php';
    8.  
    9. //Проверка переходa со страницы авторизации
    10. if(isset($_POST['submit']))
    11. {
    12.  
    13.     //Сравниваем переданный идентификатор из формы с текущим идентификатором сессии
    14.     if($_SESSION['id'] != session_id())
    15.         {
    16.             exit("$error");
    17.         }
    18.  
    19.             //Авторизация
    20.         $login = mysql_escape_string($_POST['login']);
    21.         $email_query = "SELECT password FROM user WHERE login='".$login."'";
    22.         $name = mysql_query($email_query);
    23.         if(!$name)
    24.         {
    25.         echo mysql_error();
    26.         echo "Ошибка выполнения запроса!<br />";
    27.         echo "<a href='".$filename."'>Попробовать еще!</a>";
    28.         exit();
    29.         }
    30.  
    31.         if(mysql_num_rows($name) > 0)
    32.         {
    33.         $password = mysql_result($name, 0);
    34.             if (md5(md5($_POST['password'])) == $password)
    35.             {
    36.                 if(session_start())
    37.                 {
    38.                 $_SESSION['ok'] = 1;
    39.                 echo "<meta http-equiv='refresh' content='0; url=".$filename."'>";
    40.                 echo "<a href='".$filename."'>Нажмите ссылку, если Ваш браузер не поддерживает автоматическую переадресацию!</a>";
    41.                 }
    42.             }
    43.             else
    44.             {
    45.             echo "Неправильный пароль!<br />";
    46.             echo "<a href='".$filename."'>Попробовать еще!</a>";
    47.             exit();
    48.             }
    49.         }
    50.  
    51.         else
    52.         {
    53.         echo "Такой пользователь не зарегистрирован!<br />";
    54.         echo "<a href='".$filename."'>Попробовать еще!</a>";
    55.         exit();
    56.         }
    57. }
    58. else
    59.     {
    60.         exit ("$error");
    61.     }
    62. ?>
    конфигурационный файл
    Код (Text):
    1.  
    2. <?php
    3.  
    4.   // Имя сервера базы данных
    5.   $dblocation = "localhost";
    6.  
    7.   // Имя базы данных
    8.   $dbname = "user";
    9.  
    10.   // Имя пользователя
    11.   $dbuser = "root";
    12.  
    13.   // Пароль
    14.   $dbpasswd = "";
    15.  
    16.  
    17.   // Соединяемся с сервером базы данных
    18.   $dbconnect = @mysql_connect($dblocation,$dbuser,$dbpasswd);
    19.   if (!$dbconnect)
    20.   {
    21.     echo( "<P>Сервер базы данных не доступен, зайдите позже!</P>" );
    22.     exit();
    23.   }
    24.  
    25.   // Выбираем базу данных
    26.   if (! @mysql_select_db($dbname,$dbconnect) )
    27.   {
    28.     echo( "<P>База данных не доступна, зайдите позже!</P>" );
    29.     exit();
    30.   }
    31.  
    32. // ошибки при заполнени логина
    33. define('ERROR_LOGIN_1', "имя пользователя меньше 2 символов <br />");
    34. define('ERROR_LOGIN_2', "имя пользователя больше 22 символов <br />");
    35. define('ERROR_LOGIN_4', "имя пользователя должно состоять из символов <b>a-z A-Z 0-9 .- _</b> <br />");
    36. define('ERROR_LOGIN_5', "имя пользователя меньше 2 символов<br />имя пользователя должно состоять из символов <b>a-z A-Z 0-9 .- _</b> <br />");
    37. define('ERROR_LOGIN_6', "имя пользователя больше 22 символов<br />имя пользователя должно состоять из символов <b>a-z A-Z 0-9 .- _</b> <br />");
    38. define('ERROR_LOGIN_8', "такой пользователь уже существует <br />");
    39.  
    40. define('LOGIN_TooSmal', 1);
    41. define('LOGIN_TooBig', 2);
    42. define('LOGIN_InvalidChars', 4);
    43. define('LOGIN_AlreadyRegistered', 8);
    44.  
    45.  
    46. // ошибки при заполнени email
    47. define('ERROR_EMAIL_1', "не введен e-mail <br />");
    48. define('ERROR_EMAIL_2', "e-mail не соответствует формату <b>sc2r2bey@netsurfing.ru</b> <br />");
    49. define('ERROR_EMAIL_3', "не введен e-mail <br />e-mail не соответствует формату <b>sc2r2bey@netsurfing.ru</b> <br />");
    50. define('ERROR_EMAIL_4', "такой e-mail уже существует <br />");
    51.  
    52. define('EMAIL_TooNo', 1);
    53. define('EMAIL_InvalidChars', 2);
    54. define('EMAIL_AlreadyRegistered', 4);
    55.  
    56.  
    57. // ошибки при заполнени пароля
    58. define('ERROR_PASSWORD_1', "не введен пароль <br />");
    59. define('ERROR_PASSWORD_2', "пароли не совпадают <br />");
    60. define('ERROR_PASSWORD_3', "не введен пароль<br />пароли не совпадают <br />");
    61.  
    62. define('PASSWORD_TooNo', 1);
    63. define('PASSWORD_NotEqual', 2);
    64.  
    65. $error = "<div align=\"center\"><b>Ошибка 404</b>, страница не найдена!</div>";
    66.  
    67. ?>
     
  2. что за уебанство?
    PHP:
    1. <?php if ($login_error_set) echo $login_errors[$login_error_set];
    Костанты в пхп существуют для галочки, это обьективный факт.
     
  3. а еще лучше вообще
    PHP:
    1. <?php if ($error) echo $errors[$error];
     
  4. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    а вот константы в объектах очень удобны =)
    хотя впринципе там есть статика
     
  5. Roman_P

    Roman_P Активный пользователь

    С нами с:
    30 май 2009
    Сообщения:
    2
    Симпатии:
    0
    Адрес:
    Москва
    создал в БД таблицу user и в ней строки count, login, password, email , но данные не заносятся