我正在尝试在用户登录其帐户后在我的程序中设置会话。如果用户输入了好的电子邮件和密码,那么程序设置一些变量,如:
$_SESSION['user']['id'] = $row['id'];
$_SESSION['user']['email'] = $email;
$_SESSION['user']['admin'] = $row['admin'];
$_SESSION['logged'] = true;
问题是,我从上面的前三行代码中收到此警告:
警告:第193行的C:\ Program Files(x86)\ Zend \ Apache2 \ htdocs \ OOPeshop \ user \ User.php中的非法字符串偏移'id'
所以我查了一下,如果设置了所有变量,那么我将这两行添加到我的代码中:
var_dump($row);
var_dump($email);
但它看起来还不错,我正在获得输出
array(2) { ["id"]=> string(2) "14" ["admin"]=> string(1) "0"}
string(22)“foobar@gmail.com”
有人可以解释一下我的问题在哪里?我检查了类似的问题,但没有找到解决我问题的方法。
我试过这个:
$user = array('id' => $row['id'], 'email' => $email, 'admin' => $row['admin']);
$_SESSION['user'] = $user;
没有更多警告。它首先设置数组,然后将整个数组设置为会话变量,它有效,但我不知道我的第一个代码中的问题在哪里,所以也许有更好理解的人可以更好地解释它。
答案 0 :(得分:1)
我试过这个:
$user = array('id' => $row['id'], 'email' => $email, 'admin' => $row['admin']);
$_SESSION['user'] = $user;
没有更多警告。它首先设置数组,然后将整个数组设置为会话变量,它有效,但我不知道我的第一个代码中的问题在哪里,所以也许有更好理解的人可以更好地解释它。
似乎$ _SESSION ['user']已经以某种方式设置为字符串,不知道为什么,但这是唯一的解释。
答案 1 :(得分:0)
此类错误可能导致尝试使用对象或数组作为索引键来访问数组索引。检查阵列是否正确。
答案 2 :(得分:0)
试试这个:
代码开头的某处
if(!isset($_SESSION['user'])){
$_SESSION['user'] = array();
}
然后你就可以继续为$ _SESSION ['user']添加元素($_SESSION['user']['id'] = ...
)