嘿,伙计们,我有一个问题,我仍然认为自己在编码方面很新,所以如果我表现得很愚蠢,请原谅我。
我现在正在学校学习,我们有一个项目来建立一个完整的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文档中找到。