【问题标题】:Warning: Trying to access array offset on value of type bool警告:尝试访问 bool 类型值的数组偏移量
【发布时间】:2021-03-31 10:10:00
【问题描述】:

登录表单工作正常,但是当我输入错误的用户名时出现错误

警告:尝试访问 bool 类型值的数组偏移量

我有一个带有此代码的登录表单:

<?php
include('class.password.php');

class User extends Password{

    private $db;

    function __construct($db){
        parent::__construct();

        $this->_db = $db;
    }

    public function is_logged_in(){
        if(isset($_SESSION['loggedin']) && $_SESSION['loggedin'] == true){
            return true;
        }
    }

    private function get_user_hash($username){

        try {

            $stmt = $this->_db->prepare('SELECT MemberID, username, password FROM admins WHERE username = :username');
            $stmt->execute(array('username' => $username));

            return $stmt->fetch();

        } catch(PDOException $e) {
            echo '<p class="error">'.$e->getMessage().'</p>';
        }
    }


    public function login($username,$password){

        $user = $this->get_user_hash($username);

        if($this->password_verify($password,$user['password']) == 1){

            $_SESSION['loggedin'] = true;
            $_SESSION['memberID'] = $user['memberID'];
            $_SESSION['username'] = $user['username'];
            return true;
        }
    }


    public function logout(){
        session_destroy();
    }

}


?>

这是给出错误的那一行:

if($this->password_verify($password,$user['password']) == 1){

【问题讨论】:

  • 如果没有找到行,$stmt-&gt;fetch 可能会返回 false。
  • 旁注:让函数有时返回值但有时不返回值是一种不好的做法。确保您要么总是返回一个值,要么根本不返回一个值。

标签: php php-8


【解决方案1】:

你的问题是get_user_hash 方法将返回false 当没有提供用户名的此类用户时。 您应该考虑将代码更改为:

if(!empty($user) && $this->password_verify($password,$user['password']) == 1){

【讨论】:

  • $this-&gt;password_verify 应该只是 password_verify
  • @El_Vanja,这部分代码正是从问题中复制而来的。作者告诉该代码在用户存在时有效。我猜这个方法是继承自Password 类。是好是坏——这是另一个问题。但我试图解决所提出的问题,而不是其他任何问题
  • 没错,我错过了类扩展另一个类的部分。
  • !empty($user) 是多余的。你可以说if($user &amp;&amp; $this-&gt;password_verify)
猜你喜欢
  • 2020-05-20
  • 1970-01-01
  • 1970-01-01
  • 2020-08-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-01
  • 1970-01-01
  • 2020-04-27
相关资源
最近更新 更多