【问题标题】:PDO returns result, but else statement doesn't workPDO 返回结果,但 else 语句不起作用
【发布时间】:2018-12-17 02:03:50
【问题描述】:

我已经被这个问题困扰了一段时间,我似乎无法弄清楚问题是什么。我正在为我的项目制作一个非常简单的基本登录页面,但是我似乎无法让我的“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!";
        }
    }

}

【问题讨论】:

  • var_dump($result); 显示什么?
  • 它显示/srv/http/default/public/signin.php:20:string '1' (length=1)
  • 什么时候应该为零?
  • 我发现很难相信任何编程环境不存储日志。如果确实如此,那么您需要尽快停止使用 Vagrant,并使用有助于而不是阻碍您的东西。

标签: php mysql pdo


【解决方案1】:

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

请阅读this 和this 以改进您在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";   
    }

}

【讨论】:

  • 非常感谢马丁。
猜你喜欢
  • 1970-01-01
  • 2013-03-29
  • 1970-01-01
  • 1970-01-01
  • 2022-11-15
  • 2012-03-18
  • 1970-01-01
  • 2012-02-09
相关资源
最近更新 更多