pdo返回结果,但else语句不起作用

ki0zmccv  于 2021-06-15  发布在  Mysql
关注(0)|答案(1)|浏览(265)

我在这个问题上纠结了一段时间,似乎搞不清楚问题出在哪里。我正在为我的项目制作一个非常简单、基本的登录页面,但是我似乎无法让我的“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!";
        }
    }

}
mqkwyuun

mqkwyuun1#

你的第一个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);

请阅读本文和本文,以改进php中的sql处理。
同时阅读本文(尤其是这个答案),并阅读有关探索php错误日志的内容。
由于你使用流浪者和错误地提到,流浪者不给错误日志,请谷歌这个信息,以发现流浪者确实给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";   
    }

}

相关问题