2013-04-08 2 views
0

У меня есть проект Android, который использует базу данных MySQL для регистрации пользователя и входа в систему. Участок регистрации работает должным образом. В разделе входа нет. Вот что, они оба используют один и тот же EXACT-запрос, чтобы проверить, существует ли уже существующий адрес электронной почты. Регистрация проверяет, чтобы пользователь не использовал этот адрес электронной почты перед тем, как сохранить пользователя. Логин использует тот же запрос, чтобы вывести хэш зашифрованного пароля + соль для сравнения с хэшем хэша пароля POSTED. Когда часть входа делает запрос, она возвращает хотя бы одну строку, но, похоже, все значения равны нулю. Вот код, где запрос:Запрос возвращает результат, но с нулевыми значениями

// Check if user already exists. 
$sql = sprintf("SELECT * FROM users WHERE email = '%s'", mysql_real_escape_string($email)); 
$result = mysql_query($sql) or die(mysql_error()); 
$no_of_rows = mysql_num_rows($result); 
if ($no_of_rows > 0) { 
    // User exists. 
    $stored_salt = $result["salt"]; 
    $stored_password = $result["encrypted_password"]; 
    $hash = crypt($password_hash, '$2a$10$'.$stored_salt); 
    // Check for password equality. 
    if ($stored_password == $hash) { 
     // User authentication details are correct. 
     $response["success"] = 1; 
     $response["uid"] = $result["unique_id"]; 
     $response["user"]["name"] = $result["name"]; 
     $response["user"]["email"] = $result["email"]; 
     $response["user"]["created_at"] = $result["created_at"]; 
     $response["user"]["updated_at"] = $result["updated_at"]; 
     echo json_encode($response); 
    } else { 
     // User authentication failed. 
     // echo JSON with error = 1. 
     $response["error"]  = 2; 
     $response["error_msg"] = "Incorrect password!"; 
     echo json_encode($response); 
    } 
} else { 
    // User does not exist. 
    $response["error"] = 1; 
    $response["error_msg"] = "Email address not found."; 
} 

объект JSON, который возвращается говорит! «Неверный пароль», так что мне пришлось его включить пароль, который был проверяемым против в объекте JSON, и пароль ноль. Мое предположение заключается в том, что запрос не возвращает результат, но он передает тест no_of_rows> 0, поэтому он что-то возвращает. Поэтому я включил другие части результата в возвращаемый объект JSON, и они тоже нулевые. Я также проверил запрос через phpmyadmin на моем сайте (он размещен на 1 и 1), и запрос работает там. У кого-нибудь есть идеи? Я новичок в PHP и MySQL, поэтому я учусь, когда я иду сюда, но я как бы ударился о стену.

+1

'$ result' является 'MySQL результат ресурс', что вам нужно сделать что-то с ним, т.е. [' mysql_fetch_array'] (http://www.php.net/manual/en/function.mysql -fetch-array.php) – Jon

+1

Добро пожаловать в переполнение стека! [Пожалуйста, не используйте mysql_ * функции] (http://stackoverflow.com/q/12859942/1190388) в новом коде. Они больше не поддерживаются и [официально устарели] (https://wiki.php.net/rfc/mysql_deprecation). См. Красную рамку? Узнайте о подготовленных инструкциях и используйте [pdo] (http://stackoverflow.com/questions/tagged/pdo) или [mysqli] (http://stackoverflow.com/questions/tagged/mysqli). – Dracs

+0

@Jon Спасибо, это действительно работает! –

ответ

2

Чтобы получить фактическую строку из набора строк, вам необходимо позвонить mysql_fetch_assoc или mysql_fetch_row.

$sql = sprintf("SELECT * FROM users WHERE email = '%s'", mysql_real_escape_string($email)); 
$result = mysql_query($sql) or die(mysql_error()); 
$no_of_rows = mysql_num_rows($result); 
if ($no_of_rows > 0) { 
    // User exists. 
    $row = mysql_fetch_assoc($result); 
    $salt = $row['salt']; 
+0

Спасибо за быстрый ответ! Проверьте это прямо сейчас ... –

+0

Удивительный! mysql_fetch_row не работает, но mysql_fetch_assoc делает, как и mysql_fetch_array. Спасибо огромное! –

Смежные вопросы