2013-08-03 5 views
1

Я пытаюсь получить мои результаты из моей базы данных, используя mysql_fetch_assoc(), но я, кажется, не будет получать никаких результатов, когда я повторяю следующий (простой белый экран):mysql_fetch_assoc - не отображает результаты

$email_address = $_POST['email_address']; 
    $password = $_POST['password']; 

    if(login($email_address, $password)){ 
     $query = mysql_query("SELECT * FROM `users` WHERE `email_address` = '$email_address' AND `password` = '$password'"); 
     $row = mysql_fetch_assoc($query); 
     echo $row['email_address']; 
    }else{ 
     echo "Invalid login"; 
    } 
+5

Ваш запрос может быть неудачным или вы можете вернуть 0 строк. Вам нужно проверить, что '$ query' преуспел, и что вы возвращаете строки. Кроме того, вы открыты для SQL Injection, и вы не должны хранить пароли как обычный текст. – Sean

+1

Где это ошибка? – ironcito

+0

Вы уверены, что пароли не хешированы? – DevlshOne

ответ

0

Вы могли бы попробовать что-то вроде следующего,

if (isset($_POST['email_address']) && isset($_POST['password'])) { 

$email_address = $_POST['email_address']; 
$password = $_POST['password']; 

//conection: 
$con= mysqli_connect("hostname","username","password","database") or die("Error " . mysqli_error($link)); 

//query: 
$query = mysql_query("SELECT * FROM users WHERE users.email_address = '$email_address' AND users.password = '$password'"); 

//display information: 
$row = mysql_fetch_assoc($query); 

if($email_address == $row['email_address'] && $password == $row['Password']){ 
echo $row['email_address']; 
}else{ 
echo "Invalid login"; 
} 
} 
0

Попробуйте if($query==NULL) {/* handle error */} поймать ошибки подключения/дБ.

Тогда

$nrows=mysql_num_rows($query); //get the number of rows returned 
if($nrows==0) //no match 
else if($nrows==1) //match 
else {/*more than 1 rows, probably sql injection */} 

Тем не менее, отойти от устаревшего расширения MySQL и использовать MySQLi вместо этого. Также hash your passwords, если вы намерены опубликовать сайт в любой момент времени, желательно с bcrypt. См. this video для краткого обзора того, почему простые хеш-функции (даже соленые) не должны использоваться для хеш-паролей и почему вместо этого используется KDF.

Наконец, ваш код открыт для SQL-инъекции. See this question о том, как обеспечить его защиту.

Как Замечание, некоторые люди избегают делать SELECT * потому

  • Схема может измениться на более поздний момент времени
  • Это дает вам столбцы, возможно, не нужно, поэтому дополнительное время передачи/обработки
  • Выбор столбцов, которые вы хотите добавляет ясности кода
0

поменять критерии для этого добавьте die(mysql_error()), чтобы проверить, есть ли какие-либо ошибки я n Ваш запрос:

$email_address = $_POST['email_address']; 
$password = $_POST['password']; 

if(login($email_address, $password)){ 
    $query = mysql_query("SELECT * FROM `users` WHERE `email_address` = '$email_address' AND `password` = '$password'") or die(mysql_error()); 
    $row = mysql_fetch_assoc($query); 
    echo $row['email_address']; 
} else { 
    echo "Invalid login"; 
} 
Смежные вопросы