HELP: Проблемма с функцией php

Тема в разделе "PHP", создана пользователем rafic, 12 июн 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. rafic

    rafic

    Регистр.:
    14 май 2008
    Сообщения:
    477
    Симпатии:
    24
    У меня возникла такая проблема. Написал кусок кода авторизации на сайте. Если я код запихиваю в функцию то он не работает, а если я ее убираю - все на ура. В чем может быть моя ошибка?:bc:
    Не рабочий вариант:
    PHP:
    function loggin($user_login,$user_pass){
        
    $user_login mysql_real_escape_string($user_login);
        
    $user_pass mysql_real_escape_string($user_pass);
        
    $user_pass md5(md5($user_pass));
        
    $result mysql_query ("SELECT usernick, userpass FROM ".$usertable." WHERE usernick ='".$user_login."'");
            while (
    $line = @mysql_fetch_array($resultMYSQL_BOTH)){
                
    $userdb $line['usernick'];
                
    $passdb $line['userpass'];
            } 
        if((
    $user_login == $userdb) && ($user_pass == $passdb)){
            echo 
    "good";
        } else {
            echo 
    "error";
        }
    }
    $user_login "user";
    $user_pass "123";
    loggin($user_login,$user_pass);
    Рабочий вариант:
    PHP:
    $user_login "user";
    $user_pass "123";

        
    $user_login mysql_real_escape_string($user_login);
        
    $user_pass mysql_real_escape_string($user_pass);
        
    $user_pass md5(md5($user_pass));
        
    $result mysql_query ("SELECT usernick, userpass FROM ".$usertable." WHERE usernick ='".$user_login."'");
            while (
    $line = @mysql_fetch_array($resultMYSQL_BOTH)){
                
    $userdb $line['usernick'];
                
    $passdb $line['userpass'];
            } 
        if((
    $user_login == $userdb) && ($user_pass == $passdb)){
            echo 
    "good";
        } else {
            echo 
    "error";
        }


    И подскажите как правильно сделать проверку SQL запроса на true и false?
    Могу ли я написать
    PHP:
    $result mysql_query ("SELECT usernick, userpass FROM ".$usertable." WHERE usernick ='".$user_login."'");
    if(
    $result){
            while (
    $line = @mysql_fetch_array($resultMYSQL_BOTH)){
                
    $userdb $line['usernick'];
                
    $passdb $line['userpass'];
            } 
    }
    так будет правильно? Мне это нужно для того, что бы в случае, если такого пользователя нету в БД, тогда запрос выдаст false и я напишу "Такой пользователь не зарегистрирован в системе":thenks:
     
  2. Belial

    Belial

    Регистр.:
    1 фев 2010
    Сообщения:
    236
    Симпатии:
    113
    По первому пункту:
    http://www.softtime.ru/bookphp/gl5_2.php
    Т.е. либо передавай все используемые переменные в функцию, либо делай их глобальными.
    По второму:
    PHP:
    $result mysql_query ("SELECT usernick, userpass FROM ".$usertable." WHERE usernick ='".$user_login."'");  
    if (
    $line = @mysql_fetch_array($resultMYSQL_BOTH)){ 
        
    $userdb $line['usernick']; 
        
    $passdb $line['userpass']; 
        } 
    Думаю, как-то так, если предполагается, что запрос всегда должен возвращать только один ряд.
     
  3. rafic

    rafic

    Регистр.:
    14 май 2008
    Сообщения:
    477
    Симпатии:
    24
    Ну думаю возвращать он должен один ряд. Так как пароль и ник у юзера будет по одному значению.

    Добавлено через 44 минуты
    Ну вот я вроде объявил внутри функции переменные $user_login,$user_pass глобальными, но результат остался тот же=( функция пишет "error":(
    PHP:
    function loggin($user_login,$user_pass){
        global 
    $user_login;
        global 
    $user_pass;

        
    $user_login mysql_real_escape_string($user_login);
        
    $user_pass mysql_real_escape_string($user_pass);
        
    $user_pass md5(md5($user_pass));
        
    $result mysql_query ("SELECT usernick, userpass FROM ".$usertable." WHERE usernick ='".$user_login."'");
            while (
    $line = @mysql_fetch_array($resultMYSQL_BOTH)){
                
    $userdb $line['usernick'];
                
    $passdb $line['userpass'];
            } 
        if((
    $user_login == $userdb) && ($user_pass == $passdb)){
            echo 
    "good";
        } else {
            echo 
    "error";
        }

    }

    $user_login "rafic";
    $user_pass "852456";
    loggin($user_login,$user_pass);
     
  4. diavolic

    diavolic

    Регистр.:
    17 мар 2010
    Сообщения:
    522
    Симпатии:
    102
    покажи результат выполнения вот такого кода:

    PHP:
    function loggin($user_login,$user_pass){ 
        global 
    $user_login
        global 
    $user_pass

        
    $user_login mysql_real_escape_string($user_login); 
        
    $user_pass mysql_real_escape_string($user_pass); 
        
    $user_pass md5(md5($user_pass)); 
        
    $sql "SELECT usernick, userpass FROM ".$usertable." WHERE usernick ='".$user_login."'";
        print 
    "SQL: $sql\n"
        
    $result mysql_query ($sql); 
            while (
    $line = @mysql_fetch_array($resultMYSQL_BOTH)){ 
                print 
    "\nwhile: ".print_r($userdb).", ".print_r($passdb);
                
    $userdb $line['usernick']; 
                
    $passdb $line['userpass']; 
            }  
        if((
    $user_login == $userdb) && ($user_pass == $passdb)){ 
            echo 
    "good"
        } else { 
            echo 
    "error"
        } 



    $user_login "rafic"
    $user_pass "852456"
    loggin($user_login,$user_pass);  
     
  5. rafic

    rafic

    Регистр.:
    14 май 2008
    Сообщения:
    477
    Симпатии:
    24
    вот результат=)
     
  6. efir

    efir Создатель

    Регистр.:
    11 сен 2006
    Сообщения:
    47
    Симпатии:
    6
    проверка примерно следующая

    $result = mysql_query(запрос)

    //после селекта:

    if($result && mysql_num_rows($result) > 0)
    {
    echo 'успешно';
    }

    else {
    echo 'не успешно';
    exit();
    }
     
  7. wal

    wal Постоялец

    Регистр.:
    24 мар 2008
    Сообщения:
    89
    Симпатии:
    30
    $usertable в функцию передается?

    вообще после лучше писать так:

    mysql_query(...) or die(mysql_error());

    тогда можно понять в запросе ли обшибка или нет...
     
  8. a_n_d_y

    a_n_d_y

    Регистр.:
    26 мар 2006
    Сообщения:
    465
    Симпатии:
    61
    PHP:
    function loggin($user_login,$user_pass){ 
        global 
    $usertable;
     
  9. rafic

    rafic

    Регистр.:
    14 май 2008
    Сообщения:
    477
    Симпатии:
    24
    Я прописал все переменные в SQL запросе на значения... что бы точно уже убедится что все передается. Функция выводит данные с базы, но вот сравнивать не хочет... почему - неизвестно=((
     
  10. a_n_d_y

    a_n_d_y

    Регистр.:
    26 мар 2006
    Сообщения:
    465
    Симпатии:
    61
    Ну выведи значения перед сравнением и посмотрим че там не так...
     
Статус темы:
Закрыта.