За последние 24 часа нас посетили 18143 программиста и 1589 роботов. Сейчас ищут 1016 программистов ...

проблема со скриптом входа

Тема в разделе "PHP для новичков", создана пользователем Donkovski, 8 дек 2007.

  1. Donkovski

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

    С нами с:
    7 дек 2007
    Сообщения:
    3
    Симпатии:
    0
    Я относительно новнький в mysql и пхп, поэтому писал скрипт не с нуля а по мануалам, но почему-то часть где должна проверятся валидность данных неработает, скорее всего это ошибка в mysql синтаксисе, исправте если найдете ошибку, буду очень благодарен.

    PHP:
    1.  
    2.  
    3. <?php
    4.  
    5. require_once($_SERVER['DOCUMENT_ROOT'].'/db.php');
    6.  
    7. if (!session_is_registered('username') && $_SESSION['logged_in'] != TRUE)  
    8. {  
    9.     // user is not logged in.  
    10.     if (isset($_POST['Login']))  
    11.     {  
    12.     if($_POST['username']!='' && $_POST['password']!='')
    13.         {
    14.         // retrieve the username and password sent from login form  
    15.         // First we remove all HTML-tags and PHP-tags, then we create a md5-hash  
    16.         // This step will make sure the script is not vurnable to sql injections.  
    17.         $u = strip_tags($_POST['username']);  
    18.         $p = md5(strip_tags($_POST['password']));  
    19.         //Now let us look for the user in the database.  
    20.         $query = sprintf("SELECT user_id, username, plevel FROM users WHERE username = '%s' AND user_password = '%s' LIMIT 1;",  
    21.         $result = mysql_query($query);  
    22.         // If the database returns a 0 as result we know the login information is incorrect.  
    23.         // If the database returns a 1 as result we know  the login was correct and we proceed.  
    24.         // If the database returns a result > 1 there are multple users  
    25.         // with the same username and password, so the login will fail.  
    26.                 if (mysql_num_rows($result) != 1)  
    27.                 {  
    28.                 // invalid login information  
    29.                 echo "Wrong username or password!";  
    30.                 //show the loginform again.  
    31.                 include($_SERVER['DOCUMENT_ROOT'].'/templates/login.tpl');  
    32.                 }else{  
    33.                 // Login was successfull  
    34.                 $row = mysql_fetch_array($result);  
    35.                 // Сохраняем инфу в сесии
    36.                 $_SESSION['user_id'] = $row['user_ID'];  
    37.                 $_SESSION['logged_in'] = TRUE;
    38.                 $_SESSION['username'] = $u;  
    39.                 // Now we show the userbox  
    40.                 show_userbox();  
    41.                 }  
    42.        }else{
    43.             // Поля были оставлены пустыми
    44.             $error = 'Please user both your username and password to access your account';
    45.             include($_SERVER['DOCUMENT_ROOT'].'/templates/login.tpl');
    46.             }
    47.     }else{  
    48.          // User is not logged in and has not pressed the login button  
    49.          // so we show him the loginform  
    50.          include($_SERVER['DOCUMENT_ROOT'].'/templates/login.tpl');  
    51.          }  
    52.  
    53. }else{  
    54.      // The user is already logged in, so we show the userbox.  
    55.      show_userbox();  
    56. }  
    57.  
    58. ?>
    59.  
    60.  
     
  2. +Sten+

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

    С нами с:
    27 авг 2007
    Сообщения:
    978
    Симпатии:
    0
    В чем проявляется нерабочесть?

    Код (Text):
    1.  require_once($_SERVER['DOCUMENT_ROOT'].'/db.php');
    Этот файлик было-бы неплохо показать.
    Ну и, естественно, ошибки. (mysql_error() в частности);
     
  3. RomanBush

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

    С нами с:
    5 дек 2007
    Сообщения:
    798
    Симпатии:
    0
    Адрес:
    200 км от Москвы
    Чтобы точно понять, почему не работает, нужен код, который заносит нового юзера в базу. Потому что вот этот код, хоть и немного странный, но рабочий.
     
  4. Donkovski

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

    С нами с:
    7 дек 2007
    Сообщения:
    3
    Симпатии:
    0
    Почему странный? Как его зделать лучше?

    Проблему решил, при регистрации вместе с именем юзера добавлялись 2 невидимых символа...
     
  5. RomanBush

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

    С нами с:
    5 дек 2007
    Сообщения:
    798
    Симпатии:
    0
    Адрес:
    200 км от Москвы
    Я бы его назвал "книжным". Потому что, например, вот этот кусок:
    я бы написал так:
    PHP:
    1. $result = mysql_fetch_array(mysql_query("SELECT user_id, username, plevel FROM users WHERE username = '".mysql_real_escape_string($u)."' AND user_password = '".mysql_real_escape_string($p)."'"));
     
  6. DarkElf

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

    С нами с:
    22 окт 2006
    Сообщения:
    1.632
    Симпатии:
    0
    RomanBush

    имхо, 1 строка = 1 функция, так удобнее потом текст читать...
     
  7. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Так писать нежелательно. Если выйдет mysql-ошибка, то после скрипт вообще остановится с фатальной ошибкой из-за отсутствия параметров в функции mysql_fetch_array.
    ИМХО.
     
  8. RomanBush

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

    С нами с:
    5 дек 2007
    Сообщения:
    798
    Симпатии:
    0
    Адрес:
    200 км от Москвы
    Не остановится. Просто в $result будет false.
    И, соответственно, можно написать:
    PHP:
    1. <?php
    2. if ($result = mysql_fetch_array(mysql_query("SELECT user_id, username, plevel FROM users WHERE username = '".mysql_real_escape_string($u)."' AND user_password = '".mysql_real_escape_string($p)."'"))) {
    3. } else { echo "Что-то не прошёл запрос.".mysql_error()."<br />";
    4. };
    Меньше переменных - меньше работы интерпретатору, меньше возможности кодеру запутаться в переменных.
     
  9. Ti

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

    С нами с:
    3 июл 2006
    Сообщения:
    2.378
    Симпатии:
    1
    Адрес:
    d1.ru, Екатеринбург
    не то курите.
    читать С. Макконнелл "Совершенный код"