1

ユーザーが自分のアカウントでログインした後、プログラムでセッションを設定しようとしています。ユーザーが適切な電子メールとパスワードを入力した場合、プログラムは次のようにいくつかの変数を設定します。

$_SESSION['user']['id'] = $row['id'];
$_SESSION['user']['email'] = $email;
$_SESSION['user']['admin'] = $row['admin'];
$_SESSION['logged'] = true;

問題は、上記のコードの最初の 3 行からこの警告が表示されることです。

警告: C:\Program Files (x86)\Zend\Apache2\htdocs\OOPeshop\user\User.php の 193 行目に不正な文字列オフセット 'id' があります

すべての変数が設定されているかどうかを確認したので、コードに次の 2 行を追加します。

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;

もう警告はありません。最初に配列を設定してから、配列全体をセッション変数に設定しましたが、うまくいきましたが、最初のコードのどこに問題があるのか​​わからないので、理解のある人がよりよく説明できるかもしれません。

4

3 に答える 3

1

私はこれを試しました:

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

もう警告はありません。最初に配列を設定してから、配列全体をセッション変数に設定しましたが、うまくいきましたが、最初のコードのどこに問題があるのか​​わからないので、理解のある人がよりよく説明できるかもしれません。

$_SESSION['user'] がどういうわけか文字列に設定されているようですが、理由はわかりませんが、それが唯一の説明です。

于 2014-01-02T00:22:07.353 に答える
0

このタイプのエラーは、オブジェクトまたは配列をインデックス キーとして使用して配列インデックスにアクセスしようとした場合に発生する可能性があります。配列が適切かどうかを確認してください。

于 2013-09-10T09:23:29.657 に答える
0

これを試して:

コードの最初のどこか

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

次に、 $_SESSION['user'] の要素を引き続き追加できます ( $_SESSION['user']['id'] = ...)

于 2013-09-10T09:23:31.170 に答える