我正在尝试使用 HTML、PHP 和 SQL 开发登录表单。由于我是 PHP 的新手,所以我一直在绞尽脑汁想弄清楚我的问题是什么以及如何解决它,所以我希望得到一些帮助。我想要做的是检查用户在 HTML 登录表单上的输入(在本例中为密码)是否与存储在数据库中的散列密码相匹配。
但是,我目前遇到一个问题,它没有这样做。代码应验证密码,如果密码正确,则应回显“密码和用户名匹配”,否则应回显“密码不正确”,但代码不会回显任何内容。
这是我试过的:
我正在使用 PHP 的password_hash插件来散列和验证用户的密码。
所以我的问题是,如何使用存储在数据库中的散列密码安全地验证用户的输入(密码)?
这是PHP代码:
if($_SERVER["REQUEST_METHOD"] == "POST") {
//declare variables and set values to null
$username = $pass = "";
$username = $_POST['username'];
$pass = $_POST['pass'];
//check if username exists
$stmt = $conn->prepare("SELECT userName FROM userDetails WHERE userName=?");
$stmt->bind_param("s", $prepname);
$prepname = $username;
$stmt->execute();
$result = $stmt->get_result();
if ($result->num_rows > 0) {
//if username exists, check if password is linked to user
echo "user exists";
$stmt = "SELECT userPass FROM userDetails WHERE userName=?";
$stmt->bind_param("s", $prepname);
$prepname = $username;
$hashpass = $stmt->execute();
$stmt->bind_result($hashpass);
$stmt->fetch();
if (password_verify($pass, $hashpass)) {
echo "password and username match";
}
else {
echo "incorrect password";
}
}
else {
echo "That user does not exist!";
return false;
}
}
编辑:感谢@Jovi,我已经修复了之前的错误,但是我现在收到了一个新错误:
Warning: Illegal string offset 'userPass' in /home/toeaimc2/public_html/php/pages/login.php on line 75
编辑: @Jovi 现在已经解决了这个问题!感谢大家的帮助!
慕田峪4524236