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

Статус
В этой теме нельзя размещать новые ответы.

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($result, MYSQL_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($result, MYSQL_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($result, MYSQL_BOTH)){
			$userdb = $line['usernick'];
			$passdb = $line['userpass'];
		} 
}
так будет правильно? Мне это нужно для того, что бы в случае, если такого пользователя нету в БД, тогда запрос выдаст false и я напишу "Такой пользователь не зарегистрирован в системе":thenks:
 
По первому пункту:

Т.е. либо передавай все используемые переменные в функцию, либо делай их глобальными.
По второму:
PHP:
$result = mysql_query ("SELECT usernick, userpass FROM ".$usertable." WHERE usernick ='".$user_login."'");  
if ($line = @mysql_fetch_array($result, MYSQL_BOTH)){ 
    $userdb = $line['usernick']; 
    $passdb = $line['userpass']; 
    }
Думаю, как-то так, если предполагается, что запрос всегда должен возвращать только один ряд.
 
По первому пункту:
*** скрытое содержание ***
Т.е. либо передавай все используемые переменные в функцию, либо делай их глобальными.
По второму:
PHP:
$result = mysql_query ("SELECT usernick, userpass FROM ".$usertable." WHERE usernick ='".$user_login."'");  
if ($line = @mysql_fetch_array($result, MYSQL_BOTH)){ 
    $userdb = $line['usernick']; 
    $passdb = $line['userpass']; 
    }
Думаю, как-то так, если предполагается, что запрос всегда должен возвращать только один ряд.
Ну думаю возвращать он должен один ряд. Так как пароль и ник у юзера будет по одному значению.

Добавлено через 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($result, MYSQL_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);
 
покажи результат выполнения вот такого кода:

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($result, MYSQL_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);
 
проверка примерно следующая

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

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

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

else {
echo 'не успешно';
exit();
}
 
$usertable в функцию передается?

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

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

тогда можно понять в запросе ли обшибка или нет...
 
PHP:
function loggin($user_login,$user_pass){ 
    global $usertable;
 
Я прописал все переменные в SQL запросе на значения... что бы точно уже убедится что все передается. Функция выводит данные с базы, но вот сравнивать не хочет... почему - неизвестно=((
 
Я прописал все переменные в SQL запросе на значения... что бы точно уже убедится что все передается. Функция выводит данные с базы, но вот сравнивать не хочет... почему - неизвестно=((
Ну выведи значения перед сравнением и посмотрим че там не так...
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху