スレッド表示 | フラット表示〕 全トピック 920 件中 298 番目 次≫ ≪前

ブラウザ「戻る」でフォームの値が初期化される

created: 2005-12-28 12:16 | modified: 2006-01-06 22:50 | reply: 7

[2844] ブラウザ「戻る」でフォームの値が初期化される

user: まえだ | created: 2005-12-28 12:16
PHP4.0ですが、フォームー>送信ボタンで別ページに
コントール内容をPOSTしています。(内容確認ページ)
質問ですが、内容修正時に「javascript:history.back();」で
入力ページに戻していますがWindows環境(2000+ie6、XP+ie6)
ではフォーム内のデータが戻ってしまっています。
Mac環境(OSX+オペラ、safari,ie5.0 )では問題ないです。

ブラウザの設定だと思いますが、わかる方、ご教授の程よろしく
お願い致します。

まえだ

[2845] セッションの利用

user: ぱぴよん | created: 2005-12-28 12:44
まえださんはじめまして、ぱぴよんと申します。


> フォーム内のデータが戻ってしまっています。

これがどういった状態かがもう少し分かりません。

入力をしてPOSTし、確認画面へ飛ばし、そこで登録と戻るのボタンを用意しているのでしょうか。

戻るが押されれば先ほど入力したデータを表示したいのかな?
と推測しますがあっていますでしょうか。

history.backではなく、セッションを用いて処理をされた方が
確実な気がします(@^?^@)

なので、戻るボタンもhistory.backではなく、入力フォームへのリンクボタンとなります。
Parent: 2844  返信 編集 削除

[2848] 検討違いかもしれませんが

user: かおり | created: 2005-12-28 16:11
同じ環境で再現してみたのですが、history.back()で戻るとフォーム内に入力した値を残るようにしておきたいのですよね??
同じ環境でも私のほうではフォームの内容は残りました。

もし
<input type="button" value="修正" onClick="javascript:history.back();">と、直接指定してあるなら、ファンクションにhistory.backを入れて、分けてみるか、外部ファイルjsにしてみてはどうでしょうか??


例)

<head>
<script language="JavaScript">
<!--
function Pageback(){
history.back();
}
//-->
</script>
</head>
<body>
<input type="button" value="修正" onClick="Pageback()">
</body>

私も戻ることによってフォームの情報がどうなるかや、ブラウザについての詳細はあまり知らないので、見当違いなお答えかもしれませんが、ぜひ余裕がありましたら試してみてくださいませ。
Parent: 2844  返信 編集 削除

[2849] キャッシュを使うのが簡単ですが。

user: ranndo | created: 2006-01-01 18:35
phpファイルの最初に
session_cashe_limiter ('private_no_expire');

としてキャッシュを読むようにさせれば、フォーム内の
データは残るのですが、リロードさせても残ってしまう
欠点が。。。
Parent: 2844  返信 編集 削除

[2850] 続:ブラウザ「戻る」でフォームの値が初期化される

user: まえだ | created: 2006-01-05 14:36
ぱぴよんさん、かおりさん、ranndoさんレスありがとうございます。
ページ構成の説明不足でした。
入力フォームページ、確認ページとも「あるページからインクルードされて表示」しています。
(post先がインクルード元ファイルで、クエリ文字列によって表示先を振り分けている)

現状:
phpファイルA:A.php(入力フォーム配置ページ)
phpファイルB:B.php(確認ページ)
(A,Bともinclude.phpよりインクルードされている)

include.php ←┐
  | ↑ 
  |→ A.php ┘
  |→ B.php


1.A.php上のフォームform1よりsubmitでB.phpを表示
2.B.php上の「前のページに戻る」でA.phpに戻る
この際に、A.phpで入力した内容が未入力状態になってしまう。
「前のページに戻る」のソースは以下の通り
<a href="javascript:Pageback();">前のページに戻って修正する</a>
尚、ブラウザの戻るボタンでも結果は同じです。


phpの「session_cashe_limiter」ですが、現状設定はnocasheでした。
レンタルサーバーなので変更は無理とのことです。
また、インクルードではなく、単純にA.phpからB.phpへpostし、
history.back()またはブラウザの戻るでWin2K+IEでも正常に動作しました。
インクルードしているページの場合は処理がまた違ってくるものなのでしょうか??
Parent: 2844  reply: 2851 返信 編集 削除

[2851] 確実に処理したいなら…

user: | created: 2006-01-06 09:09
こんにちは。

まえださんの検証例にもあるように、ブラウザの「戻る」の際に
フォームの入力内容が残るか残らないかの挙動はブラウザによって
まちまちであり、その全てを把握するのは困難(すごく面倒)なのでは
ないかと思います。

その挙動を一つ一つ検証して、例えばブラウザ判別してcache_limiterを
切り替えるなどの対策を施す…といったことも考えられますが、
それでは余計な労力がかかる上に、おそらく確実な動作も得られません。

結局、「ブラウザの『戻る』で元のフォームに戻る」のではなく、
「『戻って書き直す』などのリンクでフォームを再表示し、Cookieなり
隠しフォームなりを利用してフォームの入力内容を再表示させる」という
のが一番確実で(結果的には)手っ取り早い方法なのではないかと思います。
実際、大抵のフォームページではそのような処理をしているように思います。


あくまでも私の意見なのですが、ご参考になれば。
Parent: 2850  reply: 2852 返信 編集 削除

[2852] Re: 確実に処理したいなら…

user: ぱぴよん | created: 2006-01-06 12:22
私も箱さんと同じ意見です。

ブラウザや環境による現象の違いを解決することは困難だと思います。
ですので、確認画面で隠しフォーム(hiddenに各値をそれぞれ入れておき、
戻るボタンで入力フォームにサブミットする)という方法やセッションに値を保持しておき、
入力フォームで表示するなどの方法が良いと思います。
Parent: 2851  返信 編集 削除

[2853] 解決?:ブラウザ「戻る」でフォームの値が初期化される

user: まえだ | created: 2006-01-06 22:50
箱さん、ぱぴよんさん レスありがとうございます。
確実なところで、以下のロジックでとりあえず目的の動作を得ることができました。

フォーム内容post>確認ページ表示>postデータをセッションに代入>
修正戻る>セッションよりコントロールへ値セット

OSによるPHPの挙動はじっくり研究していきたいと思います。

まえだ
Parent: 2844  返信 編集 削除
スレッド表示 | フラット表示〕 全トピック 920 件中 298 番目 次≫ ≪前
ページの一番上へ
Googleグックマークに登録 Yahooグックマークに登録 livedoorクリップに登録 @niftyクリップに登録 はてなブックマークに登録 deliciousに登録 Buzzurlに登録 FC2ブックマークに登録
最近更新された掲示板トピックス
管理人Blog
Yahoo Search

最近更新したNote
PHPマニュアル
今日のブックマーク
PHPマニュアル関数検索
関数名を入力し検索ボタンをクリック↑