我已经坚持了一段时间,但似乎无法弄清问题所在。我正在为我的项目制作一个非常简单的基本登录页面,但是我似乎无法使我的“其他”声明生效。
正确输入用户名和密码后,我可以成功显示登录消息,但是如果我输入错误的用户名和密码,我希望没有结果,但仍然显示“用户名或密码错误”消息。它始终显示为空白。
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!";
}
}
}
答案 0 :(得分:0)
您的第一个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 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";
}
}