※ ChatGPTを利用し、要約された質問です(原文:検索フォームのセッション管理について)
検索フォームのセッション管理について
このQ&Aのポイント
PHPを利用して検索フォームから入力された値を取得し、条件にあった画面を表示しているのですがページを戻る際に警告が出てうまく戻れません。
セッション管理の流れは以下の通りです。
1. フォームから値を取得
2. 取得した値をセッション変数に代入し、条件にあったデータを表示
3. フォームの値が空でセッション変数に値がある場合はセッション変数を代入し、条件にあったデータを表示
4. フォームの値とセッション変数がともに空の場合はセッション変数を削除し、他のページに遷移
5. 新たにフォームから値が送られた場合は値を上書きする。
上記のコードでは前のページに戻る際に警告が表示されている問題が発生しています。問題を解決するためには、以下の変更を行う必要があります。
1. フォームの値が送信された場合と送信されなかった場合を分けて処理する
2. フォームの値が送信されたかどうかを判断するための条件式を追加する
3. セッション変数の代入と削除の処理を改良する
4. ページの遷移時にセッション情報を保持するための処理を追加する
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 ページを表示するには、ツール バーの [更新] ボタンをクリックしてください。】
と表示されてしまいます
上記のコードをどのように変更すれば警告をださず行いたいことに記述したようにできるのでしょうか?
ご教授ください。よろしくお願いいたします。
お礼
回答ありがとうございます。 回答頂いたとおり、POSTをGETに変えたらうまくいきました。 ありがとうございました。