簡體   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