検索フォームのセッション管理について

この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 ページを表示するには、ツール バーの [更新] ボタンをクリックしてください。】 と表示されてしまいます 上記のコードをどのように変更すれば警告をださず行いたいことに記述したようにできるのでしょうか? ご教授ください。よろしくお願いいたします。

  • PHP
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • oraora777
  • ベストアンサー率20% (56/268)
回答No.1

http://www.glamenv-septzen.net/view/29 はっきり言ってPOSTでこの手の問題に対してめんどくさく感じるならGETを使うようにした方がいい。

hetare560
質問者

お礼

回答ありがとうございます。 回答頂いたとおり、POSTをGETに変えたらうまくいきました。 ありがとうございました。

関連するQ&A

  • PHPの入力フォームのセッションによる値の受け渡し

    PHPの入力フォームに関するフォームの 値の受け渡しについての質問です フォームのフィールドの値の名前はtitleです で$_POSTで値を受け取って$_SESSIONに値を 格納、変数で出力という感じにしたいと思い こう書きました <?php session_start(); $_POST['title']=$_SESSION['tit']; $_SESSION['tit']=$title; ?> <html> <head> <title>test</title> </head> <body> <?php echo $title; ?> </body> </html> こう書いたのですが、値が表示されません 画面が真っ白になってなにも見えないです なにがおかしいのか教えてください issetはあえて使わず書いたのですが それがいけなかったのでしょうか?

    • 締切済み
    • PHP
  • セッション使用時のセキュリティについて

    問い合わせフォームをPHPで書いています。 基本的な流れは "1.html"(入力フォーム表示) ↓ "2.php"(入力内容を確認してもらいます) ↓ "3.php"(入力内容を送信します) です。 "1.html" フォームを表示して、入力してもらいます。 POSTでデータを2.phpに渡します。 "2.php" POSTされたデータを表示し、入力内容を確認してもらいます。 入力内容をチェックし、不備が無ければsession_start()し、$_SESSION変数に値を入れます。 "3.php" session_start()し、$_SESSION変数を使用します。 $_SESSION変数を使い終わったら、以下でセッションを破棄します。 $_SESSION=array(); session_destroy(); クライアント側のクッキーを削除します。 setcookie("PHPSESSID", '', time() - 42000, '/'); $_COOKIE=array(); 以上の手続きをしていますが、セキュリティの観点で見直した方が良い点はありますか? "2.php"の時点でセッションを開始していますが、もしその時点で送信(submit)しなければ"3.php"でのセッション削除が実行されない為、セッションとクッキーが残ってしまうと思いますが、どの様な問題が生じますか? アドバイスを宜しくお願いします。

    • ベストアンサー
    • PHP
  • セッションをつかったページについて

    メール送信フォームをPHPで作っています。 入力した値を管理するためにセッションを使っているのですが このページから、他のページに移動する際(リンクをクリック)に URLに http://www.xxxxx.co.jp/dir/?PHPSESSID=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx のように表示されてしまいます。 できれば、 http://www.xxxxx.co.jp/dir/ のようにセッションIDは表示しないようにしたいのですが どのようにすればいいのか教えていただけないでしょうか

    • 締切済み
    • PHP
  • 検索フォームから入力されたキーワードをresult.phpというファイ

    検索フォームから入力されたキーワードをresult.phpというファイルで $keyword = $_POST[keyword]; このように受け取っています。 ところが、キーワードによっては1ページで収まらないため、 result.php?p=2 このようなURLで「次のページへ」というリンクにしているのですが $keywordの値を保持していない(?)みたいで思い通りの表示ができません。 このようなページ移動の場合、どのようにしたら受け取った変数の値を保持できるのでしょうか。 ためしに次のようにセッションを使ってみたのですが、 session_start(); $_SESSION["keyword"] = $_POST[keyword]; うまくいきませんでした。 動的に移動する同じファイル内で変数を保持するにはどのようにしたらいいのでしょうか?

    • ベストアンサー
    • PHP
  • PHPのセッションについて

    PHPのセッションについてお尋ねします。 1ページ目でテキストボックスに値を入力させ、ポストで送信。 2ページ目でポストを受け取り、項目が正しく入力されているかチェック。 3ページ目でMySQLに書き込み というシステムを作りかけています。 2ページ目までは上手くできたのですが、2ページ目の変数を3ページ目で渡すところで滞っています。 ザッと調べてみるとセッションというのを駆使して変数の受け渡しができるようなのですが、このセッションの書き方がよくわかりません。 session_start()を入れてみましたが、次のページには引き継がれていませんでした。更に記述が必要なのでしょうか? お詳しい方、詳説または詳説ページの紹介をお願いします。

  • PHPでセッション管理

    PHPでセッション管理の勉強をしています、 テストに以下の文章があるのですが カウント2回です は表示するのですが 3回目以降も カウント2回です と表示します。 文章がどこかおかしいでしょうか? また、このセッション管理は携帯電話でも有効なのでしょうか? スミマセン、教えてください。 バージョンは MYSQL ver4.0.26 PHP ver4.2.2 です <?php session_start(); $count = 1; if (isset($_SESSION["count"])) { $count = $_SESSION["count"]; $count++; } $_SESSION["count"] = $count; ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=shift_jis"> <title>セッション変数のテスト</title> </head> <body> セッション変数のテスト<BR> <BR> <?php if ($count == 1) { ?> はじめての訪問です。<BR> <BR> セッション変数にデータがありません。<BR> このページをリロードしてください。<BR> <?php } else { ?> あなたの訪問は<?=$count?>回目です。<BR> <?php } ?> </body> </html>

    • ベストアンサー
    • PHP
  • PHPのセッションについて。

    <?php if(isset($_POST['cmdSubmit'])){ session_start(); $user = $_POST['user_name']; $_SESSION['user_name'] = $user;  header('Location:./test.php'); } ?> アンケートフォームの内容をセッションに入れて 別ページで <?echo $_SESSION['user_name'];?> という感じで出力させたいのですがうまく行きません。 セッションに登録されているかチェックするために 移動する前にecho $_SESSION['user_name']; で内容が表示されるかどうか確認したのですが そのときは問題なく内容が表示されるので、 headerで他のページに移動する前までは問題なさそうだと思います。 なにかアドバイスいただけたらとおもいます。 よろしくおねがいします。

    • ベストアンサー
    • PHP
  • セッション使用時のフォームのデータ

    PHPでsession_start();とした後のフォームで、その後にフォームで入力したデータをPOSTで送って確認画面を表示したとします。 ここで、最初のsession_start();がなければ、ブラウザの戻るボタンで前のフォーム入力画面へと戻っても、入力したデータは保存されたままですが、session_start();とした後では、入力したデータが全てクリアされてしまうようです。 ちょっと修正したい時に、すべてクリアされてしまうとかなり不便なのですが、何かよい方法はないものでしょうか?セッション変数にPOSTするデータを保存する以外で方法はないものでしょうか?

    • ベストアンサー
    • PHP
  • $_SESSIONと、POSTやGETの違い

    SESSION ・クッキーにセッションIDを作り、データをサーバーへ送信して保存。 ・セッションIDを元に、送受信系のもので送られ保存されたデータをどのページでも取得できる。 ・セキュリティが強い。 GET ・クッキーにセッションIDを作り、データをサーバーへ送信して保存。 ・セッションIDを元に、送受信系のもので送られ保存されたデータをどのページでも取得できる。 ・URLとして送信される。 ・アンカータグからも送れる。 ・セキュリティが弱い。 POST ・クッキーにセッションIDを作り、データをサーバーへ送信して保存。 ・セッションIDを元に、送受信系のもので送られ保存されたデータをどのページでも取得できる。 ・セキュリティが強い。 ・大量のデータ向け。 GETとの違いは分かるのですが、POSTとSESSIONの違いが良く分かりません。 $session_start(); $_SESSION["abc"] = "エービーシー"; のようにセッションを作って変数に格納し $session_start(); echo $_SESSION["abc"]; のように他のページで変数を使うことができますが、 POSTやGETも他のページで使えるので自動でセッションIDが作られていて SESSIONやPOSTやGETなどの送受信系のもので保存されたデータは 送受信系のものでデータを自由に取得できるのかなと思い試してみると $_SESSION["abc"]で送信したデータを他のページで$_SESSION["abc"]で取得すると正常に動き、 $_SESSION["abc"]で送信したデータを他のページで$_GET["abc"]で取得するとエラー、 $_SESSION["abc"]で送信したデータを他のページで$_POST["abc"]で取得するとエラー、 $_GET["abc"]で送信したデータを他のページで$_GET["abc"]で取得すると正常に動き、 $_GET["abc"]で送信したデータを他のページで$_POST["abc"]で取得するとエラー、 $_GET["abc"]で送信したデータを他のページで$_SESSION["abc"]で取得するとエラー、 $_POST["abc"]で送信したデータを他のページで$_POST["abc"]で取得すると正常に動き、 $_POST["abc"]で送信したデータを他のページで$_POST["abc"]で取得するとエラー、 $_POST["abc"]で送信したデータを他のページで$_SESSION["abc"]で取得するとエラー、 送信された方法と受信する方法が一致しないもの以外はエラーになりました。 おんなじ方法で送信と受信をしないとダメなのですね。

    • ベストアンサー
    • PHP
  • phpでSESSION変数の管理

    今私は、phpでページ間で変数をやり取りできる処理を作成しています。処理的には、ページAのテキストボックスtitleとテキストエリアsyosaiに入力された値をデータベースに追加し、ページBに画面を移動させるようにしたいと考えていますが、入力した値がnullになってしまい困っております。 ソースは以下のとおりです。 全部は書けませんので、怪しい部分だけ書きます。質問などがありましたら、その都度指摘をお願いします>△</ ページA ソース <form action="B.php" method="post"> <input type="text" name="title" value=""> <TEXTAREA name="syosai" cols="70" rows="10"> <input type="submit" name="b1" value="ページBへ"> <?php session_start(); if(!isset($_SESSION['title2']) || !isset($_SESSION['syosai2'])) { $_SESSION['title']=$_POST['title']; $_SESSION['syosai']=$_POST['syosai']; }else{} try{ $pdo = new PDO("mysql:host=localhost; dbname=****","****","****"); $stmt = $pdo->prepare("INSERT INTO user(clandername , syosai) VALUES(:rere3, :yuyu5)"); $stmt->bindValue(":rere3", $_SESSION['title']); $stmt->bindValue(":yuyu5", $_SESSION['syosai']); $stmt->execute(); }catch(PDOException $e){} ?> ページB ソース <form action="A.php"> <input type="submit" name="name" value="ページAへ" style="WIDTH: 70px; HEIGHT:50px"> <?php session_start(); ?> よろしくお願いいたします。

    • ベストアンサー
    • PHP

専門家に質問してみよう