- ベストアンサー
PHPを使ってのWebサイト構築:Submitしたときに次画面が描画されない。
Apatch、PHP4、PostgreSQLを使ってWebサイトの開発をしています。ブラウザはIE6を使用。NNを使用するとこの事象は発生しませんでした。 ●仕様 ・A.php → B.php → C.php という遷移をFormをSubmitすることによって行います。 ・Aでは、入力フォームがあり、そこでユーザは情報を入力して、Submitボタンを押下し、Bへ遷移します。入力した値はPOSTで渡されます。 ・Bでは、Aから渡された値を画面表示するときに受け取った値を確認のために表示。同時バックグラウンドで、Input type hidden のタグに値を渡し、そのFormをSubmitすることによりCへ遷移。(受け取った値をそのままCへPOSTで渡す。) C・では受け取った値をDBに登録し、登録終了画面を表示する。 ●不具合 BからCへ遷移するとき、画面が反映されない。 ○不具合詳細 ・BからCへのSubmitボタンを押下するとブラウザ下部のステイタスバーにはプログレスバーが延びていき、「ページが表示されました」となるにもかかわらず、画面はBの状態のままである。さらにブラウザ上部のURL入力部にはC.phpのURLが入っている。 ・DBには値が反映されている。(CのPHP処理は正常におこなわれているらしい) 処理終了後に画面のどこか(どこでもよい)を一回クリックするとぱっとCの画面が表示される。(何もしないとずっとBのままである。) ・Bの画面のままのときに、Submitボタンをもう一度押すことが出来、二度目のアクセスにいってしまう。(当システムの場合、これを行うと一意規約違反でエラーとなる。) ・AからBではこの現象はおきない。 ・毎回なるわけではなく、4回に1回くらいは正常な動作をする。 ●環境 サーバOS:RedHatLinux Webサーバ:Apatch DB:PostgreSQL7.1 実装言語:PHP4 ブラウザ:IE6(NNではならない) 対処法のわかるかた、いらっしゃいましたらお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
キャッシュの問題であれば、一度ブラウザのキャッシュをクリアし、スクリプトに header("Cache-Control: no-cache, must-revalidate"); header("Pragma: no-cache"); を加えて、様子を見てください。
その他の回答 (2)
- osamuy
- ベストアンサー率42% (1231/2878)
クライアント側のキャッシュの問題かも。 キャッシュしないよう、クライアント側に設定して、うまくいくようだったら、 HTTP応答ヘッダーとして Expires: 0 と書いてみるとか。
- kusukusu
- ベストアンサー率38% (141/363)
> ・毎回なるわけではなく、4回に1回くらいは正常な動作をする。 これがくせ者ですね。 PHPのバージョンは何でしょう? 例えば、PHP4.0.6以前のバージョンでは、PostgreSQLと組合せた時に「random crashes」するバグがあります。 以下PHPマニュアルより引用 - Fixed pg_last_notice() (could cause random crashes in PostgreSQL applications, even if they didn't use pg_last_notice()). (Zeev) と言う具合に、PHP4とだけでは分かりません。 また推論になりますが、拡張ライブラリは何か使っていますか? 特にAPCを使っている場合は、スクリプト内にglobal変数を多用すると、バグが出ることがあります。
補足
レス遅れました。すいません。 ヴァージョンは4.2.2です。ですから問題はないと思います。
補足
そのような方法があるのですか。 申し訳ないのですが、コードとしてどのように記載すればいいのでしょう? header('Expires: 0'); を記載すればいいのですか?