検索フォームのセッション管理について
PHPを利用して検索フォームから入力された値を取得し、
条件にあった画面を表示しているのですがページを戻る際に警告が出て
うまく戻れません。
流れ
1,フォームから値の取得 ⇒
2,送られた値を【$a】で受け取り、セッション変数に代入、条件にあったデータの表示(select * from sample where aaa like【$a】) ⇒
3,もしフォームの値が空でセッション変数に値があれば、セッション変数を【$a】に代入し条件にあったデータの表示 ⇒
4,フォームの値、セッション変数共に空ならセッション変数を削除し、他のページに飛ばす
5,新たにフォームから値が送られた場合は値を上書きする
以下が書いたコードです。
session_start();
if(isset($_POST["test"])){
$a = $_POST["test"];
$_SESSION["test"] = $a;
}elseif($_POST["test"] == "" and isset($_SESSION["test"])){
$a = $_SESSION["test"];
}else{
unset( $_SESSION["test"] );
if (isset($_COOKIE["PHPSESSID"])) {
setcookie("PHPSESSID", '', time() - 1800, '/');
}
session_destroy();
header( "Location: /top.html" );
exit();
}
以下で【$a】を使いsql文を組み立て、データを表示しています。
このコードだと前のページに戻る際firefoxでは
【このページを表示するにはフォームデータを再度送信する必要があります。フォームデータを再送信すると以前実行した検索、投稿や注文などの処理が繰り返されます。】
と表示され、IEでも
【警告 : ページの有効期限切れ
要求したページは、フォームで送信された情報を使用して作成されました。このページは、もう利用できません。セキュリティ保護のため、情報は自動的には再送信されません。
情報を再送信し、この Web ページを表示するには、ツール バーの [更新] ボタンをクリックしてください。】
と表示されてしまいます
上記のコードをどのように変更すれば警告をださず行いたいことに記述したようにできるのでしょうか?
ご教授ください。よろしくお願いいたします。
お礼
お答えありがとうございます。 大変申し訳ありません、問題の認識が間違っていたようです。 また、お答え頂いた内容は試してみたのですがちょっと違ったようです。 「横取り丸」と「InetSpy」というツールを使ってわかったのですが、 ブラウザからリクエストがなぜか2回行われていました。 そのため2回目の処理でセッションの値が変わっています。 (2回目の処理が行われたとするとセッション内の値は妥当です。) (1) 最初のページ ↓ 処理の実行 (2) 本来なら表示されるページ ↓ なぜかリクエスト (3) ??? (3)の時点で、画面は(2)が表示されます。 ですが、なぜかリクエストが発生し セッションの値などは(3)の値となってしまっています。 また、「InetSpy」では(3)の処理実行時に 「クライアント側が切断しました」となっています。 問題を把握しきれていない状態で質問してしまい、申し訳ありませんでした。 また、IEが勝手にリクエストを行うということが有るのでしょうか? また、勝手にリクエストを行わない様にする事は可能なのでしょうか? 宜しくお願いします。
補足
大変申し訳ありません。 解決しました。 画像の指定が間違っていました。 <IMG src=""> となっていたため同様の処理が行われていたと言う物でした。 お騒がせし大変申し訳ありませんでした。 また、お答え頂きましてありがとうございました。