微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MySQL登录系统无法从数据库获取结果

如何解决MySQL登录系统无法从数据库获取结果

<?PHP
session_start();
include 'dbh.inc.PHP'; //The connection ($conn) is working

$errors = array();  

    //Login
    if (isset($_POST['login'])) {
        $username = $_POST['username'];
        $password_1 = $_POST['password_1'];
    
        if (empty($username)) {
            array_push($errors,'enter username');
        }
        if (empty($password_1)) {
            array_push($errors,'enter password');
        }
        if (!preg_match("/^[a-zA-Z0-9]*$/",$username)) {
            array_push($errors,'username not correct');
            $username = "";
        }
    
        if (count($errors) == 0){      //The error is in this if condition
            $password = password_hash($password_1,PASSWORD_DEFAULT);
            $query = "SELECT * FROM users WHERE uidUsers=? AND pwdUsers=?";
            $stmt = MysqLi_stmt_init($conn);
            MysqLi_stmt_prepare($stmt,$query);
            MysqLi_stmt_bind_param($stmt,'ss',$username,$password);
            MysqLi_stmt_execute($stmt);
            MysqLi_stmt_store_result($stmt);
            $result = MysqLi_stmt_num_rows($stmt);
            if (MysqLi_num_rows($result) == 1){
                $_SESSION['uidUsers'] = $username;
                $idUsers_query = "SELECT idUsers FROM users WHERE uidUsers=? AND pwdUsers=?";
                $idUsers_stmt = MysqLi_stmt_init($conn);
                MysqLi_stmt_prepare($idUsers_stmt,$idUsers_query);
                MysqLi_stmt_bind_param($idUsers_stmt,$password);
                MysqLi_stmt_execute($idUsers_stmt);
                MysqLi_stmt_store_result($idUsers_stmt);
                $idUsers_result = $idUsers_stmt->get_result();
                $_SESSION['idUsers'] = $idUsers_result;
                $username = "";
                header("Location: https://...");
            }
            else{
                array_push($errors,'username or password not correct');
            }
        }
    }
    ?>

我的登录系统无法正常工作,因为我没有从数据库中获得结果或正确的结果。可能是因为数据库不接受“ MysqLi_stmt_store_result()”,但是我无法查看MysqLnd是否已打开(我的提供程序没有选择更改它的选项)。那么我的代码错误还是数据库有问题?

解决方法

您不应该这样做:

$password = password_hash($password_1,PASSWORD_DEFAULT);
$query = "SELECT * FROM users WHERE uidUsers=? AND pwdUsers=?";

password_hash()不会在每次运行时产生相同的哈希值。

您应该在uid上运行查询,检索密码,并在其上使用password_verify()

我不使用mysqli,因此最好不要将它放在各种选项上。当您通过代码回显各种调试点时,它能走多远?

您似乎确实两次运行了相同的查询,并且第一次在绑定参数时使用$idUsers_stmt,尽管此时该参数尚不存在。我想,那将停止工作,但是您可以很容易地调试它。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。