问题描述
我有一个连接到我的 sql 数据库的注册和登录页面。寄存器采用它应该的值,但 login.PHP 给出了这个错误:
Warning: Trying to access array offset on value of type bool in C:\xampp\htdocs\login\login.PHP on line 22
这是我的代码:
<?PHP
require_once "config.PHP";
require_once "session.PHP";
$error='';
if($_SERVER["REQUEST_METHOD"]=="POST"&&isset($_POST['submit'])){
$email=trim($_POST['email']);
$password=trim($_POST['password']);
if(empty($email)){
$error .='<p class="error">please enter email</p>';
}
if(empty($password)){
$error .='<p class="error">please enter password</p>';
}
if(empty($error)){
if($query=$db->prepare("SELECT * FROM users WHERE email=?")){
$query->bind_param('s',$email);
$query->execute();
$row=$query->fetch();
if($row){
if(password_verify($password,$row['password']==false||is_null($row['password']))){
$_SESSION["userid"]=$row['id'];
$_SESSION["user"]=$row;
header("location: welcome.PHP");
exit;
}else{
$error.='<p class="error">password is wrong</p>';
}
}else{
$error.='<p class="error">email is wrong</p>';
}
}
$query->close();
}
MysqLi_close($db);
}
?>
我尝试过 is_null 但似乎没有用
解决方法
基于 PHP 手册 https://www.php.net/manual/en/function.password-verify.php
password_verify ( string $password,string $hash ) : bool
password_verify 函数的第二个参数是一个哈希字符串,在你的代码中你使用布尔值作为参数
我的建议是:
if ($row) {
if (empty($row['password']) || is_null($row['password'])) {
$error .= '<p class="error">password is null</p>';
} else if (password_verify($password,$row['password'])) {
$_SESSION["userid"] = $row['id'];
$_SESSION["user"] = $row;
header("location: welcome.php");
exit;
} else {
$error .= '<p class="error">password is wrong</p>';
}
} else {
$error .= '<p class="error">email is wrong</p>';
}