我正在尝试使用 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 现在已经解决了这个问题!感谢大家的帮助!
1 回答
慕田峪4524236
TA贡献1875条经验 获得超5个赞
您bind_param
在字符串上调用该方法,它应该是一个语句对象。
您缺少为提取密码的查询创建准备好的语句对象的方法调用:
$stmt = $conn->prepare("SELECT userPass FROM userDetails WHERE userName=?"); $stmt->bind_param("s", $prepname);
- 1 回答
- 0 关注
- 81 浏览
添加回答
举报
0/150
提交
取消