#php #php-7.4
Вопрос:
Проблема возникает, когда пользователь не существует, потому что PHP 7.4 возвращается false
здесь на $fetched = $check->fetch();
итак, как справиться с этой ситуацией
$name = $_POST['name'];
$pass = $_POST['pass'];
$check = $db->prepare("SELECT id, name, pass FROM users WHERE name = ?");
$check->execute([$name]);
$fetched = $check->fetch();
if (password_verify($pass, $fetched['pass']) amp;amp; ($name === $fetched['name']){
header('Location: home');
} else {
echo 'This account not exists';
}
но я не знаю , почему это работает без password_verify()
, послушай
if ($check->rowCount() > 0 ) {
} else {
}
Комментарии:
1. проверьте, получен ли набор $[пропуск], и чем подтвердить пароль
2. Пароли в виде обычного текста и отсутствие очистки входных данных … в нем больше дырок, чем в швейцарском сыре.
3. @MartinZeitler, это не текстовые пароли, это использование
password_verify()
.
Ответ №1:
Добавьте чек на $fetched
:
if ($fetched amp;amp; password_verify($pass, $fetched['pass'])) {
header('Location: home');
} else {
echo "Invalid username or password";
}
Нет необходимости проверять $fetch['name']
. Это гарантированно будет равно $name
из-за WHERE name = ?