我正在为我的博客制作一个登录屏幕,但是当它检查您在输入字段中设置的密码是否与数据库中的散列密码相同时,他说我的当它不是时,密码是错误的。我的登录脚本在验证散列密码时失败
我已经搜索了很长时间,并问了几个班的同学,但它仍然无法正常工作。
<form id="loginForm" method="post" action="?page=blogInput">
<br><h1>LOGIN</h1>
<input type="text" placeholder="username" name="username" id="username" maxlength="24"><br>
<input type="password" placeholder="password" name="password" id="password" minlength="8"
maxlength="16"><br>
<input type="submit" value="login" id="submit">
</form>
<?php
include_once('resources/db.php');
$username = $_POST['username'];
$password = $_POST['password'];
$query = $dbh->prepare("SELECT username FROM users WHERE username=:username");
$query->execute(array(':username' => $username,));
$saved_password = $query->fetch(PDO::FETCH_ASSOC)['password'];
if (isset($username, $password)){
if (password_verify($password, $saved_password)){
if ($query->rowCount() == 1){
echo "<script language='javascript' type='text/javascript'> location.href='register.php' </script>";
}
else{
echo "<script type=\"text/javascript\">alert('Wrong username!')</script>";
}
}else{
echo "<script type=\"text/javascript\">alert('Wrong password or username!')</script>";
}
}else{
echo "<script type=\"text/javascript\">alert('You need to fill in all fields')</script>";
}
?>
它被编辑为最后的评论建议。
您正在做PDO查询的方式容易受到SQL注入的影响,请改用占位符。 – Akar
我看到一个'prepare()'调用,但是你从不'执行'()'语句。你应该在SQL中用参数':username'替换''用户名'',并在尝试获取之前调用'$ query-> execute(array(':username'=> $ username))''。 –
当你'echo $ saved_password'时,你会得到你期望的散列吗? – Thakkie