尝试回显值时出现未定义的索引错误,我使用的是类外的函数


Undefined index error when trying to echo values, I am using functions outside of the class

嘿,伙计们,我有一个问题,我仍然认为自己在编码方面很新,所以如果我表现得很愚蠢,请原谅我。

我现在正在学校学习,我们有一个项目来建立一个完整的craigslist娱乐。任何一个我遇到的问题都与PHP打交道。我已经创建了一个带有文本区域的帐户页面。我想在他们的网站上回应用户的信息,这样用户就可以看到他穿的衣服,并根据自己的喜好进行更新。由于我的导航栏包含在每个页面上,我添加了代码:

if(isset($_SESSION['logged_in_user'])){
      var_dump($_SESSION['logged_in_user']);
      $user = $_SESSION['logged_in_user'];
      var_dump($user);
 }

在我的账户页面上,我想我可以将其作为占位符中的<?= $attributes['first_name']?>。但我不断得到:

未定义的索引:first_name

另外,当我var_dump($user)时,我会得到一个受保护的$attributes数组。

在我的Auth类中,我第一次将$user定义为:

public static function attempt($attemptedUsername, $attemptedPassword) {
$user = User::findByUserName($attemptedUsername);
    if ($user == null) {
        return false;
    }
    $validPassword = password_verify($attemptedPassword,$user->password);
    if ($validPassword == true) {
        $_SESSION['logged_in_user'] = $user;            
    }    
    return false;       
}   

并且我的CCD_ 5函数在用户类中。代码是:

public static function findByUserName($user_name){
        // Get connection to the database
        self::dbConnect();
        $stmt = self::$dbc->prepare('SELECT * FROM users WHERE user_name = :user_name');
        $stmt->bindValue(':user_name', $user_name , PDO::PARAM_STR);
        //execute gets its own line, t or false
        $stmt->execute();
        $result=$stmt->fetch(PDO::FETCH_ASSOC);
        // @TODO: Create select statement using prepared statements
        // @TODO: Store the result in a variable named $result
        // The following code will set the attributes on the calling object based on the result variable's contents
        $instance = null;
        if ($result) {
            $instance = new static($result);
        }
        return $instance;
    }

您的问题似乎是无法访问静态方法attempt()之外的变量$user,这可以通过在方法attempt()的开头全局声明变量来解决,如下所示:

public static function attempt($attemptedUsername, $attemptedPassword) {
global $user;
$user = User::findByUserName($attemptedUsername);
    if ($user == null) {
        return false;
    }
    $validPassword = password_verify($attemptedPassword,$user->password);
    if ($validPassword == true) {
        $_SESSION['logged_in_user'] = $user;
    }
    return false;

}

关于这方面的更多信息可以在这里的PHP文档中找到。