0

index.phpの には、次のようなものがあります(簡略化):

session_start();

// some code, login, etc

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

// continues

include('function.prepare.foodlist.session.php');

// more code

それでも、私の apache2 のエラー ログでは、このエラーが返されることがあります(個人的に再現することはできませんが、他のユーザーから発生することもあります)。

PHP 通知: 未定義のインデックス: 37 行目の /path/to/function.prepare.foodlist.session.php のユーザー

これはどのように起こりますか?

編集

要求ごとに、function.prepare.foodlist.session.phpファイルの 37 行目に次のように書かれています。

`foodlist-categories`.`name-".$_SESSION['user']['language']."` as `catname`
4

2 に答える 2

1

この警告は、配列インデックス "user" が定義されていないことを示しています。$_SESSION['user'] を使用する前に、インデックス/キー「user」が配列 $_SESSION にあるかどうかを確認する必要があります。

if (isset($_SESSION['user']['language'])) {
    //do something with $_SESSION['user']['language'] like your code:
    `foodlist-categories`.`name-".$_SESSION['user']['language']."` as `catname`
} else {
    // default
   `foodlist-categories`.`name-en` as `catname`
}

おそらく、まだ署名していないユーザーか、Cookie の有効期限が切れているか、またはこの行の前に $_SESSION['user'] の設定を解除したか、session_start() をもう一度呼び出した可能性があります。

私の英語でごめんなさい

于 2013-05-26T15:13:41.033 に答える
0

function.prepare.foodlist.session.php への呼び出しがどこから行われたかを示唆するのは実際には難しいかもしれませんが、この通知を避けるために、おそらく 37 行目の前に isset() を追加することができます:

if (isset($_SESSION['user'])) {
  // line 37
  // etc.
}

また、条件付きで実行されるコードによって、37 行目より前にセッションが失われている可能性や、セッションが自然に期限切れになっている可能性もあります。

それが役に立てば幸い!

于 2013-05-26T15:23:05.170 に答える