Интересно, что php 7.4 создает мне проблемы при входе в скрипт

#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 = ?