为了账号安全,请及时绑定邮箱和手机立即绑定

使用 MySQL 数据库中的 PHP 验证散列密码

使用 MySQL 数据库中的 PHP 验证散列密码

PHP
青春有我 2022-12-23 14:35:13
我正在尝试使用 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);


查看完整回答
反对 回复 2022-12-23
  • 1 回答
  • 0 关注
  • 81 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信