【问题标题】:Warning: Illegal string offset警告:非法字符串偏移
【发布时间】:2013-09-13 22:19:56
【问题描述】:

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

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

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

【问题讨论】:

  • 当你var_dump($row['id'])时会发生什么?
  • @Steven string(2) "14"
  • 还有var_dump($_SESSION)?
  • 我的代码上面:array(0) { } 和下面的代码 array(2) { ["user"]=> array(3) { ["id"]=> string(2) " 14" ["email"]=> string(22) "foobar@gmail.com" ["admin"]=> string(1) "0" } ["logged"]=> bool(true) }
  • 那么这部分代码看起来没有问题......如果有那么$_SESSION变量将不会被设置。您确定您正在查看正确的线路吗?如果你注释掉这些行会发生什么? (要么这样,要么我们的电线交叉!)

标签: php session


【解决方案1】:

这种类型的错误可能是由于尝试使用对象或数组作为索引键来访问数组索引。检查你的数组是否正确。

【讨论】:

    【解决方案2】:

    试试这个:

    代码开头的某个地方

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

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

    【讨论】:

      【解决方案3】:

      我试过这个:

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

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

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

      【讨论】:

        猜你喜欢
        • 2021-09-30
        • 2013-04-11
        • 2012-04-09
        • 2019-07-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多