注意:尝试访问数组中 null 类型值的偏移量

问题描述

注意:尝试访问第 13 行 C:\xampp\htdocs\X$AMIT\login.PHP 中 null 类型值的数组偏移

第 13 行是: if (password_verify($password,$row['password'])) {

当我放入数据库中不存在的数据时出错。

<?PHP
    session_start();
    include('includes/connection.PHP');

    if (isset($_POST['login'])) {
        $username = MysqLi_real_escape_string($conn,$_POST['username']);
        $password = MysqLi_real_escape_string($conn,$_POST['password']);

        $query = "SELECT password,name,status FROM users WHERE username = '$username'";
        $result = MysqLi_query($conn,$query);
        $row = MysqLi_fetch_assoc($result);

        if (password_verify($password,$row['password'])) {
            $_SESSION['logged_in'] = true;
            
            if ($row['status'] == 'U') {
                $_SESSION['check_status'] = 'U';
                $_SESSION['name'] = $row['name'];
                $_SESSION['success_login'] = "login successfully";
                header('refresh:2; index.PHP');
            }
            else if ($row['status'] == 'A') {
                $_SESSION['check_status'] = 'A';
                $_SESSION['name'] = $row['name'];
                $_SESSION['success_login'] = "login successfully";
                header('refresh:2; index.PHP');
            }
        }
        else {
            $_SESSION['err_login'] = "ชื่อผู้ใช้หรือรหัสผ่านไม่ถูกต้อง";
            #header('refresh:2; login.PHP');
        }
    }
?>

解决方法

你尝试做的事情是行不通的。

之后:

 $row = mysqli_fetch_assoc($result);

您必须检查 $row 是否有任何值。 如果没有值则说明密码和用户输入错误,则在登录表单中代表用户。