是什么引起了这个注意:未定义的索引:


what make this Notice: Undefined index:

我的类中有这个方法:

public function login ( $username, $password )
    {
            $pdo = parent::getConnection();
            $sql = 'SELECT username, pass FROM users
                WHERE username = :username';
            $stmt = $pdo->prepare($sql);
            $stmt->bindParam(':username', $username);
            $stmt->execute();
            if ( $stmt->rowCount() === 1 ) {
                $result = $stmt->fetch(PDO::FETCH_ASSOC);
                if (password_verify($password, $result['password'])) {
                    return true;
                } else {
                    Error::setError('', 'Wrong username or password');
                    return false;
                }
            }else {
                Error::setError('', 'Wrong username or password');
                return false;
            }
    }

我已经尝试过像这样使用Isset,但未定义的索引仍然存在:

if (isset($password)){
                    if (password_verify($password, $result['password'])) {
                        return true;
                    } else {
                        Error::setError('', 'Wrong username or password');
                        return false;
                    }
 }

当我使用print_r查看变量时,它有一个值$用户名来自$_POST['username'],$password来自$_POST['password']

if($_SERVER['REQUEST_METHOD'] === 'POST'){
    $inputText = [
        'username',
        'password',
    ];
    $v->required($inputText);
    $username = $_POST['username'];
    $password = $_POST['password'];

    if (count(Error::getError())=== 0 && ($user->login($username,$password))){
        http_redirect(admin/index.php);
    }
}

您从数据库中选择pass,但在$result数组中引用password

罪魁祸首:

if (password_verify($password, $result['password'])) {

解决方案:

if (password_verify($password, $result['pass'])) {