
PHP初心者です。
私が作っているPHPのシステムで、ユーザーがフォームデータ入力途中に、他のページに移動すると、「戻る」ボタンなどですぐに戻ってきても、入力したフォームデータが消えてしまいます。
例えば、この「教えてgoo」の「新しい質問をする」のフォームはPHPで生成されていますが、
http://oshiete1.goo.ne.jp/oshiete_new.php3?c=256
途中でちょっと他のページに行っても、(すぐ戻れば?)入力したデータは保持されますよね。
こんなふうにしたいのですが、どうすればよいでしょうか?
「戻る」ボタンで戻ったときに、サーバーから毎回新しいXHTMLをロードしてくるので、入力データがクリアされてしまうのでしょうか?
フォーム入力⇒確認画面⇒「戻る」ボタンで戻るとフォームデータが保持されないということではなく、あくまでフォーム入力中に、ちょっと他のページに行って戻ってくるという設定です。
よろしくお願いします。
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
ありがとうございますーーー!
見事に解決しました。
いろいろ自分でも調べた結果、
session_cache_limiter('private_no_expire');
と設定することにしました。
今回のことでいろいろ勉強したら、やっぱりセッション変数使ってて、セッション限定のクッキーも使っていたので、session_start()は消すことはできませんでした。
どんぴしゃの回答、ありがとうございました!!!
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ヘッダを追加しているかどうか
など、色々と方法はあるので、どれかでキャッシュ無効にしているのが効いているのかもしれません。
この回答への補足
★下記の「お礼」より、こちらの「補足」を後で書いてます!
お礼を書いた後、いろいろ試してみたところ、結果は、以下の通りでした。
○PHPでは残らないフォームデータがHTMLでは残りました。
○header(),httpd.conf,.htaccessでは、キャッシュをコントロールする記述はありませんでした。
○metaタグでのno-cacheの設定を削除してもフォームデータは残りませんが(PHPの場合)、HTMLならmetaタグにno-cacheの設定があってもフォームデータは残りました。
ということで、問題はPHPだと思い、
>(セッション使っているのなら、また別の可能性もありますが)
が気になったので、PHPの先頭のsession_start()を削除したら、フォームデータが残るようになりました。
session_start()については、恥ずかしながらよく理解しておりません。これがPHPの先頭にあると、呼ばれるたびに新しいセッションになる?(呼ばれなければ前のセッションを引き継ぐ???)、という程度の意識しかなくて、他のプログラムの再利用で分からないまま使っていたのですが・・・。
これは、セッション変数を使っていなければ、消してしまっていいのでしょうか?ちなみにクッキーは使っています。
不勉強で申し訳ありませんが、よろしくお願いいたします。
回答ありがとうございます。
実はご指摘の
>■<meta>タグでキャッシュ無効にしていないか
><meta http-equiv="Pragma" content="no-cache">
><meta http-equiv="Cache-Control" content="no-cache">
><meta http-equiv="Expires" content="***">
>のようなコードがあるかどうか
ですが、これらのコードあります。が、消してみましたが、結果は変わりませんでした。まだ「シロ」と判断したわけではありませんが。
他のコードも紛れ込んでいるかもしれません。あまりわからず見よう見真似で作った部分もあるので(^^;)。他に挙げていただいたものをを検証してみますね。
PHPとHTMLは、結局ダウンロードしてくるデータは同じなので、HTMLではまだ試していませんが、同じことですよね、たぶん。
とにかくキャッシュの無効化が影響しているかについて、調べてみます。ありがとうございました。
No.4
- 回答日時:
>>残っているかどうかは微妙に様々ということは、おそらく私の
>>PHPの場合は、必ず消していると考えるのが妥当ということで
>>すよね~。
この辺はちょっと自信がないのですが、「戻る」というのはブラウザーのキャッシュ等を利用しているのですが、ブラウザーのバージョン等によって、キャッシュされるものとされないのがあるように感じます。
VistaとIE7だとクリアーされますが、Vista/XPとFirefoxなら残るとか?
幾つかのブラウザーでお試しになってはいかがでしょうか。
何度も回答ありがとうございます。
それがですねー、ブラウザの違い以上の違いなのです。うちにはWindows98のIE6.0とWindowsXPのIE7.0、Firefox2.0を常時使っているのですが、私の書いたPHPでは、入力したフォームデータはどれも残りませんが、他サイトのはたいがい残ります。
「戻る」というのは、ブラウザのキャッシュを利用しているようで、でも一部ブラウザが勝手に判断しているようでもあり、その辺がブラウザのバージョンによって違うということもわかる(詳細は闇の中(^^;)・・・)のですが。
No.3
- 回答日時:
意味が良く分りました。
一つにはセッションを使うとういのもありますが、この場合、途中でユーザーが別なサイトに行ってしまったというのは「ユーザーの勝手」になると解釈することもできるので、そこまで親切設定にしなくても良いのでは、と個人的には感じます。
書き込んだフォームデーター等が戻った場合に残っているかどうかですが、残っている確率が多い感じがしますが、繰り返しWindows、Mac、IE、Firefoxなどのバージョンや組み合わせによって微妙に様々です。
それによって戻ってもデーターが残っているというのを前提にPHPなどを作成しない方が良いのではと思います。
再度の回答ありがとうござます。
残っているかどうかは微妙に様々ということは、おそらく私のPHPの場合は、必ず消していると考えるのが妥当ということですよね~。
戻る度に毎回ページ更新してしまっているということなんですかね~。どうしたらそうしないで、例えばローカルのキャッシュを表示するように(これが正しいかはわかりませんが)書けるんだろう???
ご指摘のとおり、ユーザーの勝手ということも言えるし、特にそれを仕様にしたいわけではないのですが、私のPHPではなぜ一切残らないか知りたいです。
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の内容や創り方に拠ると思われます。
この回答への補足
回答ありがとうございます。
つたない説明で申し訳ありませんが、状況をちょっと補足させてください。
想定しているのは単純な状況で、移動先のページは任意です。なので、移動先のページで、データを受け取って返してあげたり、データを返すための「戻る」ボタンを作ることは想定していません。
例えば、教えてgooの「PHPカテゴリー」の「新しい質問をする」ページ
http://oshiete1.goo.ne.jp/oshiete_new.php3?c=256
で「質問内容」欄に何か書きかけたまま、「確認画面へ」ボタンなどを押す前に、気まぐれで、同じウィンドウでYahoo!のトップページに移動したりしますよね。この場合、「教えてgoo」のサーバーやYahoo!がデータを受け取ったりはしてないですよね。
Yahoo!に行ったらすぐにブラウザの「戻る」ボタンで、戻ってくると、「質問内容」欄に書きかけた内容はまだ残っています。私のPCの2つのブラウザでは残っています。
しかし、私の作ったPHPのフォームでは、ちょっとよそに行って戻ってくると、データは毎回クリアされてしまいます。戻る度にサーバー側でPHPが実行されて、ページが更新されてしまうから?と思うのですが、よく分かりません。
どうなっているのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHPで入力フォームでデータを確認表示画面まで送る流れを日本語で理解したいのです。 1 2023/05/29 19:12
- PHP php 入力画面から確認表示画面へ情報の受け渡しについて。 1 2023/06/07 18:00
- JavaScript sessionStorageを調べています。 1 2023/06/20 12:41
- Access(アクセス) Access 登録ボタンからサブフォームの更新 1 2022/07/22 10:23
- その他(プログラミング・Web制作) 入力フォームへ、データを自動的に入力するプログラム。どうやって作る? 4 2023/01/16 10:24
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- PHP php 確認表示画面で値をSESSIONから取り出す理由の解釈は正しいでしょうか? 1 2023/06/09 17:39
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Chrome(クローム) 入力フォームの履歴を消したい 2 2023/06/29 13:02
- PHP $_SESSIONに渡した後はそのまま使っても問題ありませんか? 3 2022/11/08 22:17
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
htmlからbatファイルを起動する
-
ブラウザの「戻る」ボタンを押...
-
ページ移動した場合の、フォー...
-
ウェブサイト上のボタンを自動...
-
ビジネスメールの敬称
-
エクセルVBA テキストボックス...
-
Googleフォームを回答したか確...
-
数字以外の入力をエラーにする...
-
Excel-VBAでInputBox+Pulldown...
-
VBAでInputBoxの再入力をさせる...
-
初歩的な事だと思います。 Sub...
-
テキストボックスの番号を使っ...
-
BASP21のSendMailとSendMailEx...
-
入力フォームの値をQRコードで...
-
DATE型変数を初期化する方法
-
お問い合わせフォームから送信...
-
InputBoxでキャンセルボタンを...
-
VBA R1C1形式で変数の入力について
-
inputboxの日本語入力切替について
-
至急です!Excelがわかりません
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
htmlからbatファイルを起動する
-
アイフォン使ってたらちょくち...
-
メール送信フォームとhistory.b...
-
戻ると入力したフォームの内容...
-
ウェブサイト上のボタンを自動...
-
ページ移動した場合の、フォー...
-
大学の出欠確認でQRコードを読...
-
Zend framework リダイレクトで...
-
階層式のプルダウンセレクトを...
-
メールフォームの確認画面が表...
-
RealSystem Producer BasicをDL...
-
非同期通信で掲示板を作る際の...
-
子画面から親画面に値を返す方法
-
掲示板のセキュリティについて...
-
編集不可で固定とするため とは
-
PHPとSQLiteのアップロードにつ...
-
PHPで特定の文字列を抽出する方法
-
ブラウザの「戻る」ボタンを押...
-
SQL insert文のシングル・ダブ...
-
accessでフォームを希望の入力...
おすすめ情報