PDO возвращает результат, но оператор else не работает - PullRequest
0 голосов
/ 16 декабря 2018

Я застрял на этом в течение некоторого времени, и я не могу понять, в чем проблема.Я делаю очень простую, базовую страницу входа для своего проекта, однако я не могу заставить мой оператор 'else' работать.

Когда имя пользователя и пароль введены правильно, я могу успешно получитьпоявится сообщение «Вход», однако, если я неправильно введю имя пользователя и пароль, я бы не хотел получать результаты и все равно отображал бы сообщение «Неверное имя пользователя или пароль», однако оно всегда отображается пустым.

PS: я знаюо сессиях и остальном, я просто хочу разобраться в этом, прежде чем я попытаюсь поработать над ними.

За последние несколько часов я искал другое место, но не смог найти никакой помощи, которая могла бы помочь мне устранить неполадки.

$user_name = $_POST['username'];
$user_password = $_POST['password'];


if (isset($_POST["username"], $_POST["password"]))  {

    $results = $pdo->query("SELECT user_name, user_password FROM users WHERE user_name = '" . $user_name . "' AND  user_password = '" . $user_password . "'");

    foreach ($results as $result) {

        $result = $pdo->query("SELECT COUNT(*) FROM  users WHERE user_name = '" . $user_name . "' AND  user_password = '" . $user_password . "'")->fetchColumn();

        //var_dump($result);

        if ($result > 0){
            echo "Signed In";
        } else {
            echo "Incorrect Username or Password!";
        }
    }

}

1 Ответ

0 голосов
/ 16 декабря 2018

Ваш первый PDO неверен.

Пароли должны всегда хешироваться .Сделайте это.

Вам нужно изменить это на:

 $results = $pdo->prepare("SELECT user_name, user_password FROM users 
            WHERE user_name = :user ");
 $results->execute(['user' => $user_name]);
 $found = $results->fetch();
 print_r("found row: ".$found);

Пожалуйста, прочитайте this и this , чтобы улучшить обработку SQL в PHP.

Также прочитайте этот (и особенно этот ответ ), а также прочитайте об исследовании журналов ошибок PHP .

Поскольку вы используете Vagrant и ошибочно упоминаете, что Vagrant не выдает журналы ошибок, пожалуйста, Google эту информацию , чтобы найти, что Vagrant DOES выдает журналы ошибок PHP.Вы должны использовать их.

почти каждая часть вашего кода НЕ является лучшей практикой и нуждается в серьезном улучшении.


Полное исправление вашего кода

Предполагается, что имя пользователя является уникальным значением

if (!empty($_POST["username"]) && !empty($_POST["password"]))  {

    $results = $pdo->prepare("SELECT user_name, user_password FROM users 
               WHERE user_name = :user");
    $results->execute([':user' => $_POST["username"] ]);
    $foundRow = $results->fetchAll();

    if(count($foundRow) < 1){  
       // no user found
       echo "Incorrect Username or Password!";
    }
    elseif(password_verify($_POST["password"],$foundRow['user_password']) !== true){
       // bad password given
       echo "Incorrect Username or Password!";
    }
    else {
       echo "Signed In";   
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...