UPDATEした際、古い結果が表示される

このQ&Aのポイント
  • PHPでメンバーのプロフィール編集の画面を作成し、テキストボックスの内容を変更して「更新」ボタンを押すと、更新されたデータを表示する方法について質問したいです。
  • UPDATE文は正しく実行され、テーブルは更新されますが、画面には更新前の古いデータが表示されてしまいます。
  • UPDATE文実行後の最新の結果を即座に表示するには、どのような方法がありますか?別のページを作成してそこから戻る方法がベターでしょうか?
回答を見る
  • ベストアンサー

自身をSubmitを、UPDATEした際、古い結果が表示される。

自身をSubmitを、UPDATEした際、古い結果が表示される。 お世話になっております。 PHPでメンバーのプロフィール編集の画面を作成しております。 テキストボックスの内容には、SELECTで取得してきた現在のデータが入っていまして、 テキストボックスの中身を変更して「更新」ボタンを押すと、 更新ボタンを押した時点でのテキストボックスの内容でUPDATE文を実行します。 更新ボタンがクリックされた際には、JavaScript内でUPDATE_FLG=1を立てて自身にPOSTしています。 この時、UPDATE自体は上手くいくのですが、表示される(取得してくる)のは、 更新前の古いデータのままなのです。(テーブルは更新されています。) テキストボックスには当然古いデータが表示される為、このまま再度「更新」ボタンを押すと 元に戻ってしまいます。 どうすればUPDATE実行後の最新の結果を表示できるでしょうか? それとも別のページ(UPDATE処理のみを実行するPHP)を作成し、 その新しいページから戻るようにするのがベターなのでしょうか? 出来る事なら「ボタンを押したら即反映されたのがユーザーに見える」のを実現したいのです。 2000文字制限の為かなりはしょって書きますが、 ソース上から、こんな感じで書いております。 (日本語部分は「そんな事をしようとしてコードが書いてある」と思ってください) 【self.php】 <?php  セッション開始 更新フラグを確認 更新フラグ格納用文字列を準備 $tempHtml .= "<input type='hidden' id='update_flg' name='update_flg' value=0>";  IF開始(  更新フラグが1ならば、テキストボックスの値をPOST $update_para1 = $_POST['nick_name']; $update_para2 = $_POST['address'];  UPDATE実行  更新フラグを0に初期化  IF閉じる) //-------------------------------------------  セレクト実行 結果行数を取得(エラー判定の為)  取得データを表示の為の各変数にセット ?> <html><body> <?php   if開始(セレクト結果が0行)(パスワード&IDで対象者なし)    エラー文    echo "</body></html>";    exit;   if終了 ?> <form action="self.php" name="update_mst" method="post"> <!-- 更新フラグ渡し用 --> <input type='hidden' id='update_flg' name='update_flg' value=0> <!-- POST用 --> <input type= "text" id='nick_name' name='nick_name' value="<?php $nickname ?>"> <input type= "text" id='address name='address' value="<?php $address ?>"> <IMG id="btnupdate" onclick="clickupd();" name="btnupdate"> </form> </body></html> 【self.js】 function clickupd() { document.update_mstedit.submit(); }

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

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

  • ベストアンサー
  • BellBell
  • ベストアンサー率54% (327/598)
回答No.1

古いデータが表示されるのは、ブラウザがキャッシュを保存し、それを表示している為と考えられます。 キャッシュしないようにするには、すべての出力の前に以下のようなヘッダ内容を事前に出力する事がセオリーとなっています。 header('Last-Modified: '.gmdate( 'D, d M Y H:i:s').' GMT'); header('pragma: no-cache'); header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // 過去の日付 一部の行儀の悪いブラウザは(IE5~6あたりの一部のバージョン)、これを無視してキャッシュする事もあるため完全ではないです。 あくまで、キャッシュしないでね、とお願いしているだけですので。 それでも、上記だけで(最近のブラウザでは)OKでしょう。 他に気になることと言えば、一般的にはJavaScriptと連動させて更新作業をするという事は行われません。 JavaScriptはOffにできるからという理由です。 JavaScriptがOffの環境でも、更新ができるようにするために、すべてHTMLの基本機能(送信等)とPHPだけで作成します。 そのうえで、入力必須項目がすべて入力されているか否かなど、ユーザーにとっての便利機能をJavaScriptで埋め込む事はやります。 ※仮にJavaScriptがOffの場合でも便利機能が使えないだけで、すべてのシステム機能はJavaScriptがなくても動作するため。 入力値チェック(必須項目の抜けがないか等)がないかを確認するため、自分自身に投げて確認する事は一般的に行われます。 項目の抜けや、メールアドレスの形式、電話番号の形式が合っているかなどを確認して、ダメならエラーを表示して再入力を求めるというのが楽だからです。 チェックが通れば、別画面に飛ばして『更新しますよろしいですか?』と表示して、OKで更新処理をする画面を付ける事が多いですが。 ちなみに、一般的にはデータベースの更新系のインターフェイスは。 メンバーデータの一覧ページ。表形式で何人ものデータが一覧できる(名前と代表的な情報のみ)。人数が多ければ『次の20人』のリンクが表示されるなど。 メンバーデータの表示ページ。一覧ページから、メンバーの名前をクリックして表示されるページ、メンバーのすべての情報が一覧されている。表示のみ。 メンバーデータ編集ページ-更新確認ページ(よろしいですか?) 質問で言われているページ(メンバーデータの新規入力を兼用する事もある) わざわざ、一般的なものを紹介するのは、編集-更新が終わった後に飛ぶページは、一般的には編集ページではなく表示ページだとの説明の為です。 更新ページを表示と兼ねるのは、間違ってデータをさわってしまい、しかも更新してしまう可能性を考えてよろしくないと思いましたので、念のために長々と書きました。 一般的かどうかを中心に書いていますので、別に一般的であろうがなかろうが気にしないというスタンスもありですが。

wendy0303
質問者

お礼

BellBellさん、お世話になっております。 前回の質問に続き、ありがとうございます。 最新の表示自体は、キャッシュの件のみでクリアできそうですが、 入力画面と表示画面を分けるという一般例とその理由が非常に参考になりました。 確かにその通りですね。。 加えてJavaScriptに記載するか、PHPに記述するかの基準も参考になりました。 これまで、「ボタン動作はJavaScriptに記載してしうものだ」としか考えていませんでしたが (むしろ考える余裕がなかった)ユーザーの意思でON/OFFできるものに その書き方は適切ではない事、むしろ基本を無視している事だと知りました。 おそらくは実際の開発では基本的な事なのだと思いますが、 JavaScriptやHtml、PHPの本を読んでいては気付けない事を教えていただき、 ありがとうございます。

関連するQ&A

  • 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
  • チェックボックスでの送信

    チェックボックスにチェックを入れて送信したときは1を チェックを入れずに送信したときは0をPHP側で受けたいのですが チェックを入れずに送信するとPHP側で$_POST['flg']を取得できないため、エラーになります。 方法はないでしょうか? <form action="test.php" method="post"> フラグ:<input type="checkbox" name="flg" value="1" /> </form> === test.php =========== <?php $flg = $_POST['flg']; print($flg); ?>

    • ベストアンサー
    • PHP
  • submitについて

    <script type="text/javascript"> <!-- function go() { document.getElementsByTagName("input")[3].value+="text"; } //--> </script> <form name="NAME1" action="#" method="get" onSubmit="go()"> <input type="submit" name="submit1" value="送信1" > <input type="submit" name="submit2" value="送信2"> <input type="button" name="submit3" value="送信3" onClick="go()"> <input type="text" name="text1" size="10"> </form> なのですが、送信2のsubmitを4回クリックすると以下のように表示されるのですが、どういう感じで実行されているのかわかりませんので教えていただけないでしょうか? 一応一回目はtext1=textとなるのですがテキストボックスには空になります。 2回目はtext1=textとなりテキストボックスにはtextが入ります。 3回目はtext1=texttextとなりテキストボックスには空になります。 4回目はtext1=textとなりテキストボックスは空になります。 以上よろしくお願いします。

  • submitボタンにvalue属性の値でないラベルを表示したい

    submitボタンを複数設置し,全てのラベルに「これを修正する」と表示したいのですが, 下記のように押下されたsubmitボタン別に,POSTする値をそれぞれ1,2,3と分けたいです. (page.phpは,$_POST["PageNumber"]として1か2か3を受け取る) ですが,value属性の値がボタンのラベルとしてボタン表面に記されてしまい,困っています. 何とかならないでしょうか? <form method="post" action="page.php"> <input type="submit" name="PageNumber" value="1"></td></tr> <input type="submit" name="PageNumber" value="2"></td></tr> <input type="submit" name="PageNumber" value="3"></td></tr> </form>

    • ベストアンサー
    • HTML
  • 2つのsubmitボタンがあるときに

    最初に書いたボタンが優先され 単にリターンキーを押したときに 最初のsubmitボタンが反応します。 後のsubmitボタンが反応するようにするにはどうしたらいいのでしょうか? つまり下記のPHPをブラウザに表示させているときにリターンキーを押したときには submit2 is pushed. と表示させるにはどうしたらいいのでしょうか? <form method="post" action="<?=$PHP_SELF?>"> <input type="text"/><br/> <input type="checkbox"/><br/> <input type="radio" name="radio"/><br/> <input type="submit" name="submit" value="submit1" tabindex=-1/><br/> <input type="submit" name="submit" value="submit2" tabindex=1/><br/> </form> <?php if(isset($_POST['submit'])) { echo$_POST['submit'].' is pushed.'; } ?>

    • ベストアンサー
    • PHP
  • 2つのボタンによるSubmitについて

    javascript初心者です。 <form name="sample01" action="aaa.html" method="POST" >  <input type="checkbox" name="chk[]" value="1">  <input type="checkbox" name="chk[]" value="2">  <input type="checkbox" name="chk[]" value="3"> </form> このチェックボックスの値を、submitで渡したいのですが、 AボタンとBボタンの2つ設けて、それぞれクリックすると別ファイルに遷移させたいのです。 Aボタンは、「sample01」のaction属性にあるaaa.html Bボタンは、bbb.html こういったことはできるのでしょうか?

  • テキストリンクでsubmitするには

    簡易的な検索システムを作ってみました。 検索フォームでは、エリアごとにボタンを設置し、ボタンをクリックすることで、該当するエリアの検索結果が表示されるというものです。 今回、この検索フォームのボタンをテキストリンクで表示できないかと思い、ご質問させて頂きました。 現在は、下記のようなフォームにしています。 <form name="" method="POST" action="result.php"> <ul> <li><input type="submit" name="area" value="新宿"></li> <li><input type="submit" name="area" value="銀座"></li> <li><input type="submit" name="area" value="渋谷"></li> <li><input type="submit" name="area" value="恵比寿"></li> <li><input type="submit" name="area" value="品川"></li> </ul> </form> ※例えば、新宿のボタンをクリックすると、新宿に該当する検索結果が表示されます。 このボタンをテキストリンクにする方法としては、どういった方法がありますでしょうか? アドバイスをいただければ幸いです。

    • ベストアンサー
    • HTML
  • formのボタンをsubmitしたときにアラート

    javascript で、formのボタンをsubmitしたときに アラートが出るようにしたいと思います。 下記のように作ってみましたが、うまく動きません。 どのようにすれば動くでしょうか? ご教示いただきたくお願いいたします。 <script type="text/javascript"> function(){ $('form1').submit(function(){ $.ajax({ type: 'POST', data: postData, url: 'buy.php', success: function(data){alert("購入できました");} error: function(){alert('購入できませんでした。再度お試しください');} }); return false; }); } </script> <form name="form1" id="form1" method="POST" name="form1" value="form1" action="buy.php"> <input type="hidden" name="id" value="100" /> <input type="hidden" name="name" value="高橋" /> <input type="submit" value="Save"> <form/>

  • フォームからsubmitをした後再読込させない

    ほぼ初心者でフォームからの申込みを作っています 現在 <form name="a11" action="/products/detail.php" method="post" > <input type="hidden" name="mode" value="cart" /> <input type="hidden" name="product_id" value="137" /> <input type="hidden" name="product_class_id" value="634" /> <input type="checkbox" name="quantity" value="1" /><br /> <input type="submit" value="受講する" onClick="alert('カゴに入れました');value='受講する'" /> </form> というフォームが数十個あるのですが、 一つチェックボックスにチェックを入れて送信するとページの再読み込みがされて チェックボックスのチェックが消えてしまいます どのチェックボックスにチェックを入れたかは残したまま、次のsubmitを押させたいのです 申込み者がどのフォームにチェックを入れて送信をしたかを見れるようにして 次のページに飛ばしたいのです どうかご教授願います HTMLの項目で質問させていただきましたが、JavaScriptのプログラム例など 併せてご教授いただけますと助かります どうぞよろしくお願いいたします

  • タグで、submitさせる方法について

    こんばんは。いつもお世話になります。 input type='submit'を、画像を使ってロールオーバーで実行したいのですが、 うまくいきません。1)は、OKです。2)と3)は、ダメでした。 1)にある、name='delete_msg' が重要な鍵ですが、 それをJavaScriptでどう扱えば良いのかわかりません。 3)の<div id='delete' ..... onclick='javascript:....'>Delete</div>で実行させる場合、 function pmDelete()にどう書けば良いのか教えてください。 よろしくお願いします。 ------(例:ここから)----------------------------- <html><head> <script type='text/javascript'> function pmDelete(){ document.mSg.submit(); } </script> <style type='text/css'> div#delete { float: left; background-image: url(page_up.gif); text-indent: -1000em; overflow: hidden; cursor: pointer; } div#delete:active { background-position: 0 -20px; } </style> </head> <body> <form name='mSg' id='mSg' action='index.php' method='post'> <input type='checkbox' id='msg_id[]' name='msg_id[]' value='10' />111<br /> <input type='checkbox' id='msg_id[]' name='msg_id[]' value='10' />222<br /> <input type='checkbox' id='msg_id[]' name='msg_id[]' value='10' />333<br /> 1)<input type='submit' name='delete_msg' value='Delete' /><br /> 2)<input type='submit' value='Delete' /><br /> 3)<div id='delete' name='delete' onclick='javascript:pmDelete();'>Delete</div> </form></body></html> ------(例:ここまで)-----------------------------

専門家に質問してみよう