• ベストアンサー

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ではならない) 対処法のわかるかた、いらっしゃいましたらお願いします。

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

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

  • ベストアンサー
  • kusukusu
  • ベストアンサー率38% (141/363)
回答No.3

キャッシュの問題であれば、一度ブラウザのキャッシュをクリアし、スクリプトに header("Cache-Control: no-cache, must-revalidate"); header("Pragma: no-cache"); を加えて、様子を見てください。

その他の回答 (2)

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.2

クライアント側のキャッシュの問題かも。 キャッシュしないよう、クライアント側に設定して、うまくいくようだったら、 HTTP応答ヘッダーとして Expires: 0 と書いてみるとか。

ocat_uske
質問者

補足

そのような方法があるのですか。 申し訳ないのですが、コードとしてどのように記載すればいいのでしょう? header('Expires: 0'); を記載すればいいのですか?

  • kusukusu
  • ベストアンサー率38% (141/363)
回答No.1

> ・毎回なるわけではなく、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変数を多用すると、バグが出ることがあります。

ocat_uske
質問者

補足

レス遅れました。すいません。 ヴァージョンは4.2.2です。ですから問題はないと思います。

関連するQ&A

  • FORMで送信ボタンと戻るボタンを2つつけてそれぞれ遷移先を変えたい

       以下のような画面を作りたいのですが↓ -------------------------------------------------------------------------------- ● a.php (ユーザ情報入力画面) ※フォームに入力する画面    <FORM method="POST" action="b.php">   <INPUT type="text" name="mail">   <INPUT type="submit" name="submit" value="確認">  </FORM> ● b.php (ユーザ情報入力確認画面)※フォームに入力された値を表示する画面  <FORM method="POST" action="c.php">   <!-- ここには、フォームに入力された値を表示する -->   <INPUT type="submit" name="submit" value="登録"> // c.php に遷移する   <INPUT type="submit" name="submit" value="戻る"> // a.php に戻る  </FORM> ● c.php (完了画面) -------------------------------------------------------------------------------- b.php について質問なのですが、 b.phpにおいて、登録ボタンと戻るボタンを2つつけて、 それぞれ遷移先を変えたいのですが、どうすればいいんでしょうか・・・? <FORM method="POST" action="c.php">と書いてしまうと、 戻るボタンを押しても戻らずに、c.phpに遷移してしまいますよね?? こういう場合ってJavaScriptとかで遷移先を指定するんですか・・? もしそうでしたら、JavaScriptがよくわからないので できればサンプルコード示していただけると助かります・・・。   

  • submitして確認画面へ

    質問させて下さい。 今PHP/MySQLを使って登録画面を作っています。 その中に【県】を選ぶと【その県の市】がセレクトメニューに表示され選択できるという2連セレクトメニューを入れています。 DBからセレクト項目を取得してくるため1回submitさせています。 そうすると、まだ入力を行っていない部分が【入力してください】と【確認】を1回押した状態になってしまうのです。 submitさせているので当然なのですが、回避する手段とかありませんか? PHPは出来上がったものを購入しているので、いまいち命令の変え方が解りません。 宜しくお願いします。

    • ベストアンサー
    • PHP
  • php入力画面から確認画面へ情報の受け渡しについて

    php 参考書を見て、入力フォームを作成しているのですが、入力画面から確認表示画面へ情報の受け渡しについて。コードは下に記載してます。 最初の入力画面ではmethod=postで送信した値を$name = $_POST['name'];に格納して次ページに値を渡すそうですが、 しかし最初の入力画面のコードに$name = $_POST['name'];と、もうひとつ、$name = $_SESSION['name'];でセッションに保存して、次ページに送るそうですが、 保存したSESSIONの値は次ページの確認表示画面から戻る際に値を保持する際に使うからだそうですが、値を次ページに送る役割が$_POSTやSESSIONにあるならば、SESSIONの記述のみで 次ページに送れると思うのですが、なぜこのコードの場合、$_POSTに値を格納する必要があるのでしょうか? 以下のような解釈で正しいでしょうか?? 「$_POSTは送られた値をフォームのvalue内にechoで出力するため、SESSIONはページから戻る場合に値を保持するため」 回答よろしくお願いいたします。 コード 入力初期画面 <?php session_start(); $errors = array(); if(isset($_POST['submit'])){ $name = $_POST['name']; if($name === ""){ $errors['name'] = "お名前が入力されていません。"; } if(count($errors) ===0){ $_SESSION['name'] = $name; header('Location:https:次ページへform2.php'); exit(); } } ?> <body> <form action="form1.php" method="post"> お名前 <input type="text" name="name" value="<?php if(isset($name)){echo $name;}?>"> <input type="submit" name="submit" value="確認画面へ"> </body> コード 確認表示画面 <?php session_start(); if(isset($_SESSION['name'])){ $name = $_SESSION['name']; } <body> <form action="form3.php" method="post"> お名前 <?php echo $name;?> <input type="submit" name="submit" value="送信する"> p><a href="form1.php?action=edit">入力画面へ戻る</a></p> </body>

    • ベストアンサー
    • PHP
  • PHPのsubmitボタンが複数ある場合

    PHPのsubmitボタンが複数ある場合 PHPにて会計システムを開発しているのですが、計算ボタンと、更新してDBに追加するためのボタンとが混在している場合、 $_POST等で押されたボタンの処理を分けることは可能なのでしょうか?下の例は、 name="calculation"が押された場合は、val1とval2の値を計算し、totalへ値を入れます。 name="update"が押された場合は、それぞれのフォームの値をDBに更新をかけます。 <?php <form action="****.php" method="POST"> <input type="text" name="val1" value="20"/> <input type="text" name="val2" value="30"/> <input type="text" name="total" value="50"/> <input type="submit" name="calculation"/> <input type="submit" name="update"/> </form> ?> お分かりになる方、ご教授お願いいたします。

    • 締切済み
    • PHP
  • 【Javascript】でsubmit時に一瞬ページトップへ画面が動いてしまう

    FORMのACTION先への画面遷移を、onClickを使ってsubmit()しています。 === Javascript部分 ============================ <SCRIPT TYPE="text/javascript"><!-- function hoge(a,b){ frm.elm1.value = a; frm.elm2.value = b; frm.submit(); } --></SCRIPT> === HTML ====================================== <A HREF="#" onClick="hoge(1,2);">ほにゃらら</A> =============================================== HREF="#" としているせいか、 クリック時にページ先頭へ動いてからFORMの遷移先へ画面が遷移します。 Aタグを使っているのはスタイルシートでhover時のスタイルを指定したい為です。 Javascriptでsubmitしているのはご覧のようにクリック時に一処理したい為です。 普通のリンクのように クリックしてから遷移するまでの間に画面が動かないよう 自然に見せるにはどのようにすれば実現できるでしょうか。 ご存知の方いらっしゃいましたらご教示願います。 宜しくお願い致します。

  • PHPで携帯サイト構築

    はじめまして HTML、PHPで携帯サイト構築をしているのですが下記点でこまっています。 【やりたいこと】 サイトにログイン機能やユーザー登録などの機能を持たせない(仕様です)で遷移してきたユーザーを判別したい。 【問題点】 PEARの携帯用のライブラリを使用してユーザーの機種情報を取得して、判別しています。 たとえば某ぐるめなびサイト(以下、ぐるなび)のように、遷移時にトップページですでにこちらが誰であるかを認識できるようにするにはどうすればいいのかでなやんでいます。 もっというとトップページの前にページを設けてそこで <form action="hoge" utn> <input type="submit"> と,すれば値の取得はできるのですが、そのあとに直接トップページに遷移されていまうと結局、機種情報の取得ができせん。 こんな方法がある、又参考URLでも結構ですのでご助言お願いいたします

    • 締切済み
    • PHP
  • PHPで、エラーがない場合のみ画面遷移させたい

    PHPのプログラムを作成しています。 動きとしては、 1.ユーザに値を入力させる 2.ユーザが入力した値をエラーチェックする 3.エラーチェック結果、もしエラーがなければ次の画面へ遷移し、エラーがあればメッセージを画面表示 という動きです。 (教えて!gooのような動きをさせたいのですが・・・) 2まではできていますが、3で困っています。 エラーがあればメッセージを画面表示するのはできましたが、エラーがない場合に次の画面へ移動する、というのはどのように実装すれば可能でしょう。 現在のソースは以下のような流れです。 ---------------------------------------------------------- <?php  $getChar = $_POST["char"] /*--- エラーチェック ---*/  if( isset( $_POST["send"] ) ) {   if( strcmp( $getChar, "" ) == 0 ) { // 空の場合はエラー   $strErr = "エラーメッセージ";   }   echo $strErr;  // ★  } ?> <form method="POST" action="#" name="form">  名前:<input type="text" name="char">  <input type="submit" name="send" value=\"送信\"> </form> ---------------------------------------------------------- 現在は上のような流れで処理を行っています。 今はエラーがある場合はエラーメッセージを表示(★部)し、ない場合はエラーメッセージを表示せず、画面遷移も行いません。 本当はエラーがない場合は次の画面へ遷移をさせたいのですが、どのように指定をさせたら良いのでしょうか。 すみませんが、ご回答よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • phpのsubmit処理について

    phpのsubmit処理について不明点があります 実装したいことは ボタンを押したらフォームの入力内容を別フォームに表示したいのですが 別フォームに呼び出しはできたのですが ボタン押下時にsubmitで表示するかの確認をしたいです 現段階ではボタンを押すと確認アラートも出ず、ただ別フォームが表示される形になってしまいます <--関数--> function showData(){ myRet = confirm("表示しますか") if (myRet == true){ } } <--form--> <form name = "FileData" action = "show.php" method="POST"> <--button--> <input type = "submit" name ="Display" onClick "showData();" value="表示"> ソースの抜粋になります これで実行するとshow.phpが呼ばれて表示はされるのですが関数が呼ばれず確認アラートも呼ばれません すぐ実行されるというものになっていますます この現象の原因と何か解決などわかることがあればよろしくお願いします。

    • ベストアンサー
    • PHP
  • submitを押すとリンク先へ移動の他にもう一つ窓を…

    お世話になります。 ページAにformがあり、いろいろ入力してsubmitボタンを押すとphpに値が渡り、結果ページBを表示する。というページがあるとします。 本当ならページBを表示したときに、ポップアップウィンドウでページCを表示したいのですが、Bページにjavascriptのwindow.openでページCが開くように設定したところ、ブラウザの設定で、ポップアップがブロックされてしまう場合があるようです。 必ずページCを表示させたいので、ページAのsubmitを押すとページBを表示し、さらに別窓でページCが確実に開く仕組みはあるでしょうか? 宜しくお願いします。

  • PHP画面遷移でスクロール位置を保持する

    いつもお世話になっております。 現在、PHP+MySQLでWebアンケートを制作中です。 画面遷移で、アンカーではなくスクロール位置を保持し、 正確に前ページのsubmitボタンを押した時点での表示状態に 戻したいです。 <詳細> q.phpはアンケートフォームです。 send.phpはエラーチェックとDB登録のモジュールです。 comp.phpは(正常に)完了したことを知らせるメッセージページです。 q.phpは、設問数が多いため、アンケートの途中途中に「保存ボタン」を用意しています。 どのタイミングで、どの保存ボタンを押すかは、 途中まで回答していたり、所々回答していたり、全く回答していなかったりと、 いろんなパターンがあると思います。 保存ボタンを押すと、send.phpに移動します。 そこでは、未回答やおかしな点がないかチェックしながら、 その都度、その時点での回答内容がDBに保存されます。 問題(未回答やエラーが)なければ、 comp.phpに移動し、終了のメッセージを表示しますが、 問題がある場合は、q.phpに戻り、問題のある箇所を赤でハイライト等で表示し直します。 このときに、最初にq.phpのsubmitを押した時点と同じ表示状態に戻したいのです。 q.phpにある複数のsubmit(class名、action先はすべて同じ)ボタンを押したときの スクロール情報を変数に格納し、移動先のsend.phpで保持し、(問題あり時に)q.phpに その値を返し、表示位置を同じにするという仕組みを知りたいです。 本番まで日数がないため、最も簡単に実装できる方法をご教授下さい。 なお、ttp://xirasaya.com/?m=detail&hid=175 を読みましたが、 html(PHP?)ソースコードへの実装方法、 javascriptとphpのデータの受け渡し方法等が 不明で実現できませんでした。 また、アンケートを実施(回答)する対象者のブラウザは、ほとんどが、IE6かIE7です。

    • 締切済み
    • PHP