PHPの問題を診断しようとしています。配列に値を渡して$_SESSION
いますが、それらの値は配列に取り込まれません。以前var_dump($_SESSION)
は何が返されているかを確認していましたが、array (0){}
. これは、セッションが設定され、値が配列に追加されていることがわかっている場合でも当てはまります。
これが私のコード(index.php)の簡略化されたバージョンです:
<?php
session_start();
var_dump($_SESSION);
if ($_REQUEST['query'] == "" or is_null($_REQUEST['query'])) {
$errormsg = "You must enter a search term to query. Please try again.";
}
?>
<form name="product_search" id="product_search" method="post" action="index.php">
<input size="60" type="text" name="query" id="query" <?php echo "value=\"" . $_REQUEST['query'] . "\" "; ?>/>
<?php if (isset($errormsg)) {echo "<span class=\"errormsg\">" . $errormsg . "</span>";} ?>
<input type="submit" class="searchBtn" value="Search"/>
<?php
$_SESSION['query'] = 'foo';
$_SESSION['search_field'] = 'man';
$_SESSION['results'] = 'chu';
?>
var_dump($_SESSION); //Will dump array(3) {...}
エラーを再現するには:
- ページをロードします。ここでは問題ありません。
var_dump($_SESSION)
一番上の は を返しますがarray(0) {}
、これは予想どおりであり、一番下の も予想通り 3 メンバーの配列を返します。 - クエリ フィールドに何かを入力してフォームを送信します (検証を無効にするため)。
$_SESSION
前回のページ読み込みで設定された変数にもかかわらず、最初のダンプはまだ を返しますarray(0) {}
。
問題を解決するためにここでコードを単純化しましたが、問題なく $_SESSION 変数を返す別のページがあります (最初のページではvar_dump
1 メンバーの配列が生成されます)。$_SESSION
ここでフォームをそれ自体に送信しているという問題がありますか?もしそうなら、あるページの読み込みから次のページに値を渡すための配列以外の方法はありますか? 私は PHP のドキュメントを見て、高低を検索しましたが、助けになるものは何も見つかりませんでした。
また、セッション ID はページの読み込み間で同じであるため、ページの読み込みからページの読み込みまでセッション状態が維持されているように見えることにも注意してください。
助けてくれてありがとう。