PDO返回结果,但其他语句不起作用

时间:2018-12-16 16:32:40

标签: php mysql pdo

我已经坚持了一段时间,但似乎无法弄清问题所在。我正在为我的项目制作一个非常简单的基本登录页面,但是我似乎无法使我的“其他”声明生效。

正确输入用户名和密码后,我可以成功显示登录消息,但是如果我输入错误的用户名和密码,我希望没有结果,但仍然显示“用户名或密码错误”消息。它始终显示为空白。

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 :(得分:0)

您的第一个PDO不正确。

密码应为always be hashed。做吧。

您需要更改为此:

 $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);

请阅读thisthis来改进PHP中的SQL处理。

还请阅读this(尤其是this answer),并阅读有关探索PHP error logs的知识。

在您使用Vagrant时,错误地提到了Vagrant没有提供错误日志,请Google this information查找Vagrant 确实提供了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";   
    }

}