警告:非法字符串偏移

时间:2013-09-10 09:16:09

标签: php session

我正在尝试在用户登录其帐户后在我的程序中设置会话。如果用户输入了好的电子邮件和密码,那么程序设置一些变量,如:

$_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;

没有更多警告。它首先设置数组,然后将整个数组设置为会话变量,它有效,但我不知道我的第一个代码中的问题在哪里,所以也许有更好理解的人可以更好地解释它。

3 个答案:

答案 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'] = ...