繁体   English   中英

警告:字符串偏移量非法

[英]Warning: Illegal string offset

用户尝试使用其帐户登录后,我正在尝试在程序中设置会话。 如果用户输入了正确的电子邮件和密码,则程序将设置一些变量,如下所示:

$_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"} 

字符串(22)“ foobar@gmail.com”

那么有人可以向我解释问题出在哪里吗? 我检查了类似的问题,但没有找到解决问题的办法。

我已经试过了:

$user = array('id' => $row['id'], 'email' => $email, 'admin' => $row['admin']);
$_SESSION['user'] = $user;

没有更多警告。 它先设置数组,然后将整个数组设置为会话变量,它起作用了,但是我不知道我的第一个代码在哪里出了问题,因此也许有一个更好的了解的人可以更好地解释它。

我已经试过了:

$user = array('id' => $row['id'], 'email' => $email, 'admin' => $row['admin']);
$_SESSION['user'] = $user;

没有更多警告。 它先设置数组,然后将整个数组设置为会话变量,它起作用了,但是我不知道我的第一个代码在哪里出了问题,因此也许有一个更好的了解的人可以更好地解释它。

似乎$ _SESSION ['user']已经以某种方式设置为字符串,不知道为什么,但这是唯一的解释。

此类错误可能是由于尝试使用对象或数组作为索引键来访问数组索引而引起的。 检查阵列是否正确。

尝试这个:

在代码的开头部分

if(!isset($_SESSION['user'])){
  $_SESSION['user'] = array();
}

然后,您可以像以前一样继续为$ _SESSION ['user']添加元素( $_SESSION['user']['id'] = ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM