Выполнение школьного задания, так что это, вероятно, тривиальный вопрос.

Пользователи могут создавать учетные записи на моем «сайте». Я храню их пароли с помощью password_hash(). Итак, на странице входа я использую

 $hash = password_hash($password, PASSWORD_DEFAULT);

Где $password - пароль, который пользователь вводит в форму.

На данный момент все работает отлично, сохраняется хешированный пароль (у меня ограничение в 255 символов, поэтому с размером нет проблем). Однако, когда я в своей форме входа хочу использовать password_verify(), у меня возникают проблемы. Небольшой фрагмент кода:

$email = $_POST["email"];
$password = $_POST["password"];

$sql = "SELECT password FROM user WHERE email = $email";
$result = mysqli_query($conn, $sql);

if (password_verify($password, $result))
{
    echo 'Successful!';
}
else
{
    echo 'Unsuccessful!';
}

$result в данном случае хешированный пароль из моей базы данных.

Когда я var_dump($result) получаю bool(false). Я просто неправильно понимаю функции или просто испортил свой запрос?

1
user4928200 22 Май 2015 в 11:51
2
$result - это набор результатов, а не строковое значение ..... вам нужно получить строку из набора результатов (используя функцию mysqli_fetch *), а затем получить доступ к элементу пароля в этой строке - php.net/manual/en/class.mysqli-result.php
 – 
Mark Baker
22 Май 2015 в 11:54
Электронная почта заполнена varcare и должна быть заключена в кавычки $ sql = "ВЫБРАТЬ пароль ОТ пользователя WHERE email = '". $ email. "'";
 – 
Saty
22 Май 2015 в 11:55

1 ответ

Лучший ответ

Попробуйте что-то вроде этого:

$sql = "SELECT password FROM user WHERE email = '$email'";
$query = mysqli_query($conn, $sql);
$result = mysqli_fetch_assoc($query);
$hash = $result['password'];

if (password_verify($password, $hash))
{
   echo 'Successful!';
}
else
{
  echo 'Unsuccessful!';
}
  • Вы не получили результатов.
  • Если вы помещаете в запрос переменную, которая является строкой, вы должны использовать кавычки.
2
22 Май 2015 в 12:00
Вы ответили слишком быстро, очевидно, мне нужно подождать еще четыре минуты! :)
 – 
user4928200
22 Май 2015 в 12:02
Хорошо, я счастлив, что смог помочь: D
 – 
user4640949
22 Май 2015 в 12:03