试图访问类型为null的值的数组偏移量时出错



我的表中有一个布尔列,名为"已验证"。我正在尝试检查验证是否等于0"false",如果是,我想显示我的错误。这是的代码行

// If User Click the Login Button
if(isset($_POST['logbtn'])){
$username = $_POST['username'];
$password = $_POST['password'];
$verified = "";
$sql = "SELECT * FROM users WHERE verified=?";
$stmt = $conn->prepare($sql);
$stmt->bind_param('b', $verified);
$stmt->execute();
$result = $stmt->get_result();
$user = $result->fetch_assoc();
$_SESSION['verified'] = $user['verified'];
if($_SESSION['verified'] == 0){
$errors['verified'] = "Please verify your Email";
}

我没有检查列是否为0,而是得到错误"Trying to access array offset on value of type null">

您还没有向我们显示完整的错误消息,但问题很可能是没有从数据库返回任何记录。您应该检查单个用户记录。

if (isset($_POST['logbtn'])) {
$username = $_POST['username'];
$password = $_POST['password'];
$sql = "SELECT * FROM users WHERE username=?";
$stmt = $conn->prepare($sql);
$stmt->bind_param('s', $username);
$stmt->execute();
$result = $stmt->get_result();
if ($user = $result->fetch_assoc()) {
$_SESSION['verified'] = $user['verified'];
} else {
// There is no such user in the database.
$_SESSION['verified'] = false;
}
if (!$_SESSION['verified']) {
$errors['verified'] = "Please verify your Email";
}
}

我更改了您的SQL,以获取仅与该用户名匹配的记录(假设它是唯一的用户标识符(,然后检查是否从数据库中提取了任何内容。我还将mysqli类型更改为s,因为在这种情况下不应该使用二进制类型。

您可以使用if (empty($_SESSION['verified']))因此,如果$user['verified']的值为0/null/空字符串/false ,它将返回true

相关内容

最新更新