• 締切済み

更新ボタンを押されたときにフォーム内容をキャッシュさせたくない

現在問い合わせ等に使うフォームを作っています。 実現したいことは、 「フォーム入力後OKボタンを押したあと入力内容の確認画面でブラウザの戻るボタンを押した場合に、ページの有効期限切れを表示させずに入力した内容をそのまま表示したい」 ということなのですが、session_cache_limiter("none");とした場合、たしかに入力内容はそのまま表示されるものの、今度は更新ボタンを押そうが別の画面に一度飛ぼうが、スクリプトを読みに行ってくれず入力内容がずっと表示されっぱなしになってしまいました。 あれこれ検索したところ、「ページ生成のたびにURLのパラメータにランダムな(ユニークな)値を付け加えればページを読み直してくれる」という話が出てきたのですが、具体的にどのようにやればよいのでしょうか。あるいは他に妙案があるでしょうか。 現在の構成は、 入り口となるHTML(PHPで出力)にフォームへのリンク(<a href=form.php>フォームへ</a>)をもうけ、フォーム専用スクリプトに飛ばしています。

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

みんなの回答

noname#119957
noname#119957
回答No.2

なおフォームの内容のクリアボタンは、普通HTMLで記述できます。

flowerpark
質問者

お礼

試行錯誤してなんとか解決しました。 ありがとうございました。

noname#119957
noname#119957
回答No.1

セッション変数を使用するとして、 <?php session_start(); ?> をページの先頭に置けば、セッションを閉じるまでの間、ブラウザに保存された”セッション変数”は保持されると思いますので、ブラウザで戻っても値は保持されると思いますし、有効期限は切れないと記憶しています。

関連するQ&A

  • session_cache_limiterについて

    お世話になっています。 キャッシュで、悩んでいます。 ログイン(セッションに名前などを登録)  ↓ 入力フォーム(「登録」ボタンを押す)  ↓ 判定(エラーが発生したら、「戻る」ボタンを押してもらい、 入力フォームに戻る。) という、ごくありきたりな、事をやっているのですが、 iniファイルで、session_cache_limiter('nocache') にすると、「戻る」ボタンを押しても、先ほど入力 したデータが全て消えています。 今度は、入力フォームの先頭で、session_cache_limiter("public");を 入れると、確かに、「戻る」ボタンを押しても、先ほど入力したデータが 保持されていますが、この状態で、 session_unset(); session_destroy(); をして、再度、入力フォームに行っても、前回のセッション情報 (前回ログインした、ユーザー名)を保持したままになっています。 セッションの情報のキャッシュは破棄して、入力フォームのデータ はキャッシュしたいのですが何か良い方法は、無いでしょうか? session_cache_limiter("private");にしても、結果は同じです。 環境は、php4.06 apache1.3 です。 よろしくお願い致します。

    • 締切済み
    • PHP
  • フォームでボタンクリック後にそのページに内容を表示する

    a.htmというファイルの中でフォームを使用しています。 フォームで送信のボタンを押すとフォームの内容を反映した文をphpを使用してb.phpに表示させています。 送信ボタンを押すとb.phpのページに飛んでしまいますが、a.htmの送信ボタンの次の行くらいにb.phpの内容を表示させるようにしたいです。 どのように記述すればできるでしょうか?

  • フォームの「戻るボタン」で内容が消えてしまう・・・

    PHPを勉強しながら、ブログをやってみたいと考えている素人です。 ネット上のフリーのフォームを利用させて頂き、問合せページを作ってみたのですが 確認ページの戻るボタンを押すと、入力が消えて、始めからやり直しになってしまいます。 session を利用しているようなのですが、素人ゆえsessionの仕組みが何とか解る程度で どこを修正して良いのか解りません。 「session_cache_limiter(‘none’);」 と言うものが、キーポイント?のようなのですが、色々と試しておりますが 一向にうまく行きません、何卒ご指導お願い致します。 以下、利用させて頂いているフォームの一部 配布元のサイト様(http://www.sapphirus.biz/php/sformmail/) 処理の流れ sformmail.html(入力) ≫ sformmail.php(入力チェック) ≫ confirm.php(確認) ≫ sformmail.php(送信[template.php/reply.php]) ≫ completion.html(完了) ○sformmail.php(入力チェック) // 設定 $mail_to = 'sample@mail.address'; // フォームデータを受け取るメールアドレス $mail_subject = 'S.B.フォームメール送信'; // 受け取る時のSubject(件名) $reply_subject = 'S.B.フォームメールより自動返信です'; // 送信者へ自動返信のSubject(件名) $mail_bcc = ''; // BCCで受け取りが必要な場合は設定 $internal_enc = 'UTF-8'; // 文字エンコード // メイン session_start(); if (!extension_loaded('mbstring')) Err('マルチバイト文字列関数が利用できません'); if (!$mail_to) Err('受取先メールアドレスが設定されてません'); if (!$_POST) Err('POSTデータがありません'); mb_language('ja'); mb_internal_encoding($internal_enc); $x_mailer = 'Sapphirus.Biz Formmail Ver. 1.40 (PHP/' . phpversion() . ')'; $mode = $_POST['mode']; switch ($mode) { case 'SEND': // メール送信 if (!$_SESSION) Err('セッションデータがありません'); // メールヘッダ if (!$_SESSION['email']) $mail_from = 'S.B.Formmail'; else $mail_from = $_SESSION['email']; $mail_header = "From: {$mail_from}\n"; if ($mail_bcc) $mail_header .= "Bcc: {$mail_bcc}\n"; $mail_header .= "X-Mailer: {$x_mailer}"; --------------文字制限のため以下省略---------------- ○confirm.php(確認) <?php //セッションを利用するのでここは削除しないで下さい session_start(); if (SID) Err('Cookieを有効にして下さい'); if (!$_SESSION) header('Location: completion.html'); function Err($err) { echo <<< EOM <html><head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>エラー:$err</title></head> <body style="font-size: 12px; line-height: 1.8em;"> <strong>エラー : </strong>$err<br> <input type="button" value="戻る" onclick="history.back();"> ----以下省略--- 他にも、入力用や送信完了用のhtmlファイル等ありますが 上記が関連しているコードだと思います。どうぞよろしくお願い申し上げます。

    • ベストアンサー
    • PHP
  • フォームボタンを押して2つの動作をさせたい!

    フレームを組んでいます。 上をa.php、下をb.php。 a.phpに表があり、表の右側にボタンがあります。 このボタンを押すとその表の該当する行の詳細がb.phpに表示します。 ただ、この時にb.phpを表示すると同時にa.phpの表の元となっているDBへsutatus情報(0/1)を更新させたいと思っています。 要望としては無駄なページは開きたくないと思っています。 方法として思いつくのは (1)PHPだけで、b.php読み込むスクリプトとDBへ書き込むスクリプトを読み出す  ⇒この場合、ボタン1つでその動作をさせる方法が思いつきません。   a.phpをPHPでreloadさせる方法がわかりません。  (フォーム以外からPOSTできるのでしょうか?) (2)PHP+javascriptで実施する。  ⇒別の新規ページを表示させて自動的に閉じることで可能?   ただ、その場合の手段がわからない・・・。 といったところは思いつきましたが 肝心な部分がいろいろ調べましたがわかりませんでした。 詳しく教えていただければありがたいです。

    • 締切済み
    • PHP
  • フォームについて

    お問い合わせフォームの流れについて質問です。 現在の流れを書きますと・・・ 1:フォームに入力し確認ボタンをクリック 2:エラーチェックを行う 2-a:エラーがあればページ移管せずメッセージ表示 2-b:エラーがなければPOST値をSESSIONに代入し確認画面へリダイレクト 3:確認画面で送信ボタンをクリックで送信ページにリダイレクト 4:送信ページでメールの送信を行いSESSION破棄 こんな流れが自分の中で基準となっているのですが、セッションだと最終的に リダイレクトするので、確認画面から入力画面に戻ると入力値が消えることや IEでページがうまく表示されないことがあるので、できるだけPOSTで対応したく 思っております。 入力画面でformのactionを自分自身としているので、これを確認用のページに 指定してやれば問題ないのですが、エラーがあろうがなかろうが確認用のURLに 変わってしまいます。 エラーがあるうちは、画面移管させたくないので何かいい方法はないかと思って いるのですが、皆さんはどのような流れでフォームを作成しているのでしょうか? おおまかな流れで結構ですのでアドバイスをいただければと思っております。

    • ベストアンサー
    • PHP
  • フォームで「戻る」と入力内容が消えてしまいます

    メールフォームページを作成中で、PHPの知識が無いため、下記のスプリクト利用させていただこうと設定中です。機能的には理想に近いスプリクトなのですが、IE(9)でフォームに入力し、確認画面から「戻る」ボタンをクリックすると、入力内容が消えてしまいました。 項目の多いフォームページの為、このまま進めるわけにはいかず、困っております。 何か解決方法はございませんでしょうか…。 または、無料・有料にこだわらず(できれば無料…)、オススメのメールフォームがございましたらお教えいただけませんでしょうか。 ■同現象はIE9(windows7)で起こりました。IE6/7/8(IE TESTER)では起こらないようです。  Chrome/Firefox/Safariでは問題ありません。(Mac版も) ■スプリクト配布いただいているサイト  http://www.sapphirus.biz/php/sformmail2/ ■同様の質問 ・http://okwave.jp/qa/q6491971.html  こちらの方はセッションが切れていたということで解決されたようですが、IEを落としたり、再起動したりで試してみましたが解決いたしませんでした…。 一人で困り果て、はじめてOKWaveを利用させていただきます。 不慣れで、情報不足かもしれませんが、何卒ご了承ください。

    • ベストアンサー
    • PHP
  • session,タスク作成,formでPOST後戻る、データ復帰、再入力不可

    phpでフォームをつくり二重登録防止のためこちら(http://code.nanigac.com/source/view/178)のサイトを参考にセッションを追加しました。 が、フォームで誤入力の後戻ると入力したデータが消えるので session.cache_limiterをnoneにしたり、METAに入っているキャッシュ関連のものを消してデータが消えないようになりましたが、 今度は再入力後登録しようとすると上記の機能によりエラーが出されてしまいます。 戻るボタンで前のページに戻り、[F5]キーでリフレッシュすれば データも消えず、登録も出来ましたが、それもどうかと思うので 戻るボタンで戻っただけで再登録できるようにしたいのですが、 どなたかやり方を教えてください。

    • ベストアンサー
    • PHP
  • ブラウザの戻るボタンについて

    PHP4.2で開発しているのですが、 session_cache_limiter("nocache"); と設定しているにもかかわらず、 戻るボタンを押すと、前の画面の情報がそのまま表示されてしまいます。 戻るボタンを押したときは、有効期限切れの画面になってほしいのですが、有効期限切れにはなりません。 ちなみにPHP.iniの設定も"nocache"になっています。 サーバのOSはLinux、 IEのバージョンは6.0です。 よろしくお願いします。

    • 締切済み
    • PHP
  • セッション使用時のフォームのデータ

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

    • ベストアンサー
    • PHP
  • フォーム送信後の戻るボタンの挙動について

    フォーム送信後の戻るボタンの挙動について PHPでホームページの一部を更新できるシステムを作りました。 項目一覧ページ → 編集ページ → 編集確認ページ → 更新後再度一覧ページへ、といったフローで更新がおこなわれます。 このとき、通常だと確認ページからブラウザの戻るボタン、もしくは画面内の戻るボタンを押すと、編集ページに戻り、入力時の情報がフォーム内に残っているのですが、編集ページを開いてから10分程度待ってから入力・送信後に確認ページから戻ると編集ページのフォーム内に入力したはずの入力情報が消えてしまいます。 おそらくサーバ(Apache)かPHPの設定によるものだと思うのですが、考えうる設定としてどんなものがあるのでしょうか。 よろしくお願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう