• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ページ移動した場合の、フォームデータの保持)

フォームデータ保持方法について質問

このQ&Aのポイント
  • PHP初心者の質問です。フォームデータ入力途中に別のページに移動すると、入力したデータが消えてしまいます。データを保持する方法について教えてください。
  • フォームデータを保持する方法について質問します。PHPで作成したシステムで、フォームデータ入力中に別のページに行ってもデータが保持されるようにしたいです。具体的な方法を教えてください。
  • フォームデータの保持方法についての質問です。入力途中に別のページに移動してもデータがクリアされないようにしたいです。どのような方法を使えば良いでしょうか?

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

  • ベストアンサー
  • tkc2007
  • ベストアンサー率50% (2/4)
回答No.6

原因はセッション関連にありそうですね。 session_cache_limiter() というのは指定されていますか? 恐らく現状はnocache(ページ内容をキャッシュしない状態)になっているのだと思います。 もし session_cache_limiter('nocache'); となっていれば、publicもしくはprivateへ変更してみて下さい。 ないようでしたら、session_start()の前に session_cache_limiter('public'); session_cache_limiter('private'); のどちらかを記述してみて下さい。 publicだと、クライアントマシン、プロキシのどちらもキャッシュを保持しますが、 privateだとクライアントマシンのみキャッシュを保持します。 どちらが良いのかは使い方によると思いますし、 nocacheでないと困る時もありますから。 session_startを削除してしまって良いかどうかは、 他の部分の処理との関連が分からないので何とも言えないです。 一度試してみて下さい。

参考URL:
http://jp.php.net/session_cache_limiter
jamey
質問者

お礼

ありがとうございますーーー! 見事に解決しました。 いろいろ自分でも調べた結果、 session_cache_limiter('private_no_expire'); と設定することにしました。 今回のことでいろいろ勉強したら、やっぱりセッション変数使ってて、セッション限定のクッキーも使っていたので、session_start()は消すことはできませんでした。 どんぴしゃの回答、ありがとうございました!!!

すると、全ての回答が全文表示されます。

その他の回答 (5)

  • tkc2007
  • ベストアンサー率50% (2/4)
回答No.5

サーバの環境が分からないのと、どういうコードを書かれているか分からないので完全な答えでは無いですが… PHPだから残らないですか?HTMLだと残ります? (HTMLのソース部分が全く同じ条件で) 「戻る」の操作で毎回新規でページを読み込んでいるのだとすれば、 一番疑わしいのは、キャッシュコントロールだと思います。 (正確な動作を確認するのであれば、フォームのページにアクセス解析を設置するかWEBサーバのログを確認して下さい) HTTPレスポンスヘッダか、HTMLのmetaタグでブラウザがページをキャッシュしない状態になっているのではないでしょうか? ■<meta>タグでキャッシュ無効にしていないか <meta http-equiv="Pragma" content="no-cache"> <meta http-equiv="Cache-Control" content="no-cache"> <meta http-equiv="Expires" content="***"> のようなコードがあるかどうか ■PHPのコード側でキャッシュを無効にしているか Header("Cache-Control: no-cache"); のような記述がないか (セッション使っているのなら、また別の可能性もありますが) WEBサーバ側でキャッシュを無効にしているか .htaccess, httpd.conf等でHTTPヘッダを追加しているかどうか など、色々と方法はあるので、どれかでキャッシュ無効にしているのが効いているのかもしれません。

jamey
質問者

お礼

回答ありがとうございます。 実はご指摘の >■<meta>タグでキャッシュ無効にしていないか ><meta http-equiv="Pragma" content="no-cache"> ><meta http-equiv="Cache-Control" content="no-cache"> ><meta http-equiv="Expires" content="***"> >のようなコードがあるかどうか ですが、これらのコードあります。が、消してみましたが、結果は変わりませんでした。まだ「シロ」と判断したわけではありませんが。 他のコードも紛れ込んでいるかもしれません。あまりわからず見よう見真似で作った部分もあるので(^^;)。他に挙げていただいたものをを検証してみますね。 PHPとHTMLは、結局ダウンロードしてくるデータは同じなので、HTMLではまだ試していませんが、同じことですよね、たぶん。 とにかくキャッシュの無効化が影響しているかについて、調べてみます。ありがとうございました。

jamey
質問者

補足

★下記の「お礼」より、こちらの「補足」を後で書いてます! お礼を書いた後、いろいろ試してみたところ、結果は、以下の通りでした。 ○PHPでは残らないフォームデータがHTMLでは残りました。 ○header(),httpd.conf,.htaccessでは、キャッシュをコントロールする記述はありませんでした。 ○metaタグでのno-cacheの設定を削除してもフォームデータは残りませんが(PHPの場合)、HTMLならmetaタグにno-cacheの設定があってもフォームデータは残りました。 ということで、問題はPHPだと思い、 >(セッション使っているのなら、また別の可能性もありますが) が気になったので、PHPの先頭のsession_start()を削除したら、フォームデータが残るようになりました。 session_start()については、恥ずかしながらよく理解しておりません。これがPHPの先頭にあると、呼ばれるたびに新しいセッションになる?(呼ばれなければ前のセッションを引き継ぐ???)、という程度の意識しかなくて、他のプログラムの再利用で分からないまま使っていたのですが・・・。 これは、セッション変数を使っていなければ、消してしまっていいのでしょうか?ちなみにクッキーは使っています。 不勉強で申し訳ありませんが、よろしくお願いいたします。

すると、全ての回答が全文表示されます。
  • Suzi
  • ベストアンサー率38% (130/334)
回答No.4

>>残っているかどうかは微妙に様々ということは、おそらく私の >>PHPの場合は、必ず消していると考えるのが妥当ということで >>すよね~。  この辺はちょっと自信がないのですが、「戻る」というのはブラウザーのキャッシュ等を利用しているのですが、ブラウザーのバージョン等によって、キャッシュされるものとされないのがあるように感じます。  VistaとIE7だとクリアーされますが、Vista/XPとFirefoxなら残るとか?  幾つかのブラウザーでお試しになってはいかがでしょうか。

jamey
質問者

お礼

何度も回答ありがとうございます。 それがですねー、ブラウザの違い以上の違いなのです。うちにはWindows98のIE6.0とWindowsXPのIE7.0、Firefox2.0を常時使っているのですが、私の書いたPHPでは、入力したフォームデータはどれも残りませんが、他サイトのはたいがい残ります。 「戻る」というのは、ブラウザのキャッシュを利用しているようで、でも一部ブラウザが勝手に判断しているようでもあり、その辺がブラウザのバージョンによって違うということもわかる(詳細は闇の中(^^;)・・・)のですが。

すると、全ての回答が全文表示されます。
  • Suzi
  • ベストアンサー率38% (130/334)
回答No.3

 意味が良く分りました。  一つにはセッションを使うとういのもありますが、この場合、途中でユーザーが別なサイトに行ってしまったというのは「ユーザーの勝手」になると解釈することもできるので、そこまで親切設定にしなくても良いのでは、と個人的には感じます。  書き込んだフォームデーター等が戻った場合に残っているかどうかですが、残っている確率が多い感じがしますが、繰り返しWindows、Mac、IE、Firefoxなどのバージョンや組み合わせによって微妙に様々です。  それによって戻ってもデーターが残っているというのを前提にPHPなどを作成しない方が良いのではと思います。

jamey
質問者

お礼

再度の回答ありがとうござます。 残っているかどうかは微妙に様々ということは、おそらく私のPHPの場合は、必ず消していると考えるのが妥当ということですよね~。 戻る度に毎回ページ更新してしまっているということなんですかね~。どうしたらそうしないで、例えばローカルのキャッシュを表示するように(これが正しいかはわかりませんが)書けるんだろう??? ご指摘のとおり、ユーザーの勝手ということも言えるし、特にそれを仕様にしたいわけではないのですが、私のPHPではなぜ一切残らないか知りたいです。

すると、全ての回答が全文表示されます。
  • inu2
  • ベストアンサー率33% (1229/3720)
回答No.2

「戻る」ボタンとは、ブラウザメニューの戻るボタンであれば、ブラウザの仕様しだいです 画面上に「戻る」ボタンを配置しているのであれば別ですよ

jamey
質問者

補足

回答ありがとうございます。 No.1の方への補足のとおりです。検索でいろいろ調べると、ブラウザの仕様次第ということがよく書かれているのですが、たいていのサイトの入力フォームでは、データを書きかけのまま他ページに浮気しても、すぐ戻ればデータは保持されるのですが、私のシステムはそうならないのです。 引き続きよろしくお願いします。

すると、全ての回答が全文表示されます。
  • Suzi
  • ベストアンサー率38% (130/334)
回答No.1

 javascriptで、<input type=button value="戻る" onClick="history.back()"> とするとフォームデーターが残りますが、これはOSとブラウザーのバージョン等によって必ずしも残りませんです。 フォームデーターに <input type=text name=your_name size=15 value="$this_name"> とかしといたのを  移動したページでは、$_POST['your_name'] で書き込みデーターを受け取り、その「戻る」に、<imput type=hidden name=your_name value="$your_name"> で元のフォームデーターに送り返してあげれば、フォームデーターの受け渡しはできます。  セッションでも受け渡しができますが、jameyさんが作ろうとしているPHPの内容や創り方に拠ると思われます。

jamey
質問者

補足

回答ありがとうございます。 つたない説明で申し訳ありませんが、状況をちょっと補足させてください。 想定しているのは単純な状況で、移動先のページは任意です。なので、移動先のページで、データを受け取って返してあげたり、データを返すための「戻る」ボタンを作ることは想定していません。 例えば、教えてgooの「PHPカテゴリー」の「新しい質問をする」ページ http://oshiete1.goo.ne.jp/oshiete_new.php3?c=256 で「質問内容」欄に何か書きかけたまま、「確認画面へ」ボタンなどを押す前に、気まぐれで、同じウィンドウでYahoo!のトップページに移動したりしますよね。この場合、「教えてgoo」のサーバーやYahoo!がデータを受け取ったりはしてないですよね。 Yahoo!に行ったらすぐにブラウザの「戻る」ボタンで、戻ってくると、「質問内容」欄に書きかけた内容はまだ残っています。私のPCの2つのブラウザでは残っています。 しかし、私の作ったPHPのフォームでは、ちょっとよそに行って戻ってくると、データは毎回クリアされてしまいます。戻る度にサーバー側でPHPが実行されて、ページが更新されてしまうから?と思うのですが、よく分かりません。 どうなっているのでしょうか?

すると、全ての回答が全文表示されます。

関連するQ&A