• ベストアンサー
  • すぐに回答を!

自身を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(); }

共感・応援の気持ちを伝えよう!

  • 回答数1
  • 閲覧数248
  • ありがとう数2

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

  • ベストアンサー
  • 回答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人』のリンクが表示されるなど。 メンバーデータの表示ページ。一覧ページから、メンバーの名前をクリックして表示されるページ、メンバーのすべての情報が一覧されている。表示のみ。 メンバーデータ編集ページ-更新確認ページ(よろしいですか?) 質問で言われているページ(メンバーデータの新規入力を兼用する事もある) わざわざ、一般的なものを紹介するのは、編集-更新が終わった後に飛ぶページは、一般的には編集ページではなく表示ページだとの説明の為です。 更新ページを表示と兼ねるのは、間違ってデータをさわってしまい、しかも更新してしまう可能性を考えてよろしくないと思いましたので、念のために長々と書きました。 一般的かどうかを中心に書いていますので、別に一般的であろうがなかろうが気にしないというスタンスもありですが。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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ボタンに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
  • フィールド一列のupdateについて

    例えば、a,b,cという三つのフィールドがあって、それぞれ10件ほどのデータが登録されているとします。この内、"a"のフィールドデータだけを、 while ($row = mysql_fetch_array($result)) { <input name="a" value="<?php print $row["a"];?>"> } で編集できるような状態で一覧表示したとします。 この時に、while処理の終わった後に、 <input type="submit" value="修正する"> というボタンを配置し、このボタンを押すとフィールド"a"の各値がそれぞれの値で更新されるようにしたいのですが、こういうことは可能なのでしょうか? while処理の中にsubmitボタンを配置し、 <input type="hidden" value="<?php print $row["連番"];?>"> のように連番フィールドの値を与えると、個別での更新はできたのですが、 特定のフィールドを件数分取り出し、一つのボタンで更新できるようにするにはどうすればよいのかわかりません。 update文の書き方もイメージできませんが、 <input name="">部分もどのように設定すればよいのか・・・ わかりづらい説明ですみませんが、よろしくお願いします。

    • ベストアンサー
    • PHP
  • 複数のフォームデータの更新

    こんにちは、 現在下記のような感じで、それぞれのIDごとに、 データを更新しておりますが、 これを一度の更新で、複数のデータの更新を行うには、 どうすればよいでしょうか?SQL文を繰り返せば出来そうですが!? いまひとつ、ピンとこないのでよろしくお願いいたします。 <form name="form1" method="post" action="kousin.php?id=1"> <td>あいう</td> <td><input name="A" type="text" id="A" size="2"></td> <td><input name="B" type="text" id="B" size="2"></td> <td><input name="C" type="text" id="C" size="2"></td> <input type ="submit" name = "submit" value = " 更新 "> <form name="form1" method="post" action="kousin.php?id=2"> <td>かきく</td> <td><input name="A" type="text" id="A" size="2"></td> <td><input name="B" type="text" id="B" size="2"></td> <td><input name="C" type="text" id="C" size="2"></td> <input type ="submit" name = "submit" value = " 更新 "> kousin.php側 $id = $_GET['id']; $time0 = $_POST['A']; $time1 = $_POST['B']; $time2 = $_POST['C']; $update = "update time_tb set "$time" where id='$id'";

    • 締切済み
    • PHP
  • PHP MySQL で updateができません

    はじめまして。Amazon.co.jpなどでよくある 「このレビューは参考になりましたか?」 Yes/No でレビューに対する評価機能をPHPで組みたいのですが、 update set でうまくデータ更新ができず困っております。 以下ソース 【入力画面】 ----------------------------------------------------------- <? while ( $adp = mysql_fetch_array( $result6 ) ) { ?> <form name="register" action="rev.php" method="post"> //レビュー内容 <?php $str = nl2br($adp['description']); echo $description . $str ; ?> //レビュー内容 このレビューは参考になりましたか? <input type="radio" name="vote" value="2" checked>参考になった<br> <input type="radio" name="vote" value="1">参考にならなかった<br><br> <? echo $adp['add_id'] ?> <input name="add_id" type="hidden" value="<?= $adp['add_id'] ?>"> <input type="submit" value="- 登録 -"> <input type="reset" value="リセット"> </form> <? } ?> 【完了画面】 ----------------------------------------------------------- <? require( '../config.php' ); require( '../lib.php' ); $link = db_connect(); $sql = "update adp set vote = '" . mysql_real_escape_string( $_POST['vote'] ) . "' where add_id = '" . mysql_real_escape_string( $_GET['add_id'] ) . "'"; $result = mysql_query( $sql ); echo mysql_error(); // ?> 投票完了 ----------------------------------------------------------- 要するに adpのデータベースのadd_idが同じテーブルの中の voteの値を1か2に更新したいだけなのですが、 1人で色々と試してもどうしても更新できずに 困っております。 どなたかお分かりの方がいらっしゃいましたら是非 お教えいただけますと幸いです。 足りない情報などございましたらご連絡ください。 補足させていただきます。 すみません、どうかお願いします。

    • ベストアンサー
    • PHP
  • 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/>

  • javascript内からのsubmit

    PHP初心者です。 javascript内でsubmitを行い、値をPHP内で受け取る想定ですが、うまく作動しません。 具体的には下記のソースで、// Aの処理に入ってきて欲しいのですが、//B に入ってきます。 初歩的なことのなのかもしれませんが、どこが間違っているのか分からずはまっています。 ご教授ください。 ソースは以下です。 ■JavaScriptとForm(admLogin.html) <script type="text/javascript" src="js/jquery-1.9.0.min.js"></script> <script type="text/javascript"> function fncLogin(){ $("#frmAdmLogin").submit(); } </script> <body> <form id="frmAdmLogin" action="admLogin.php" method="post"> <input type="text" id="txtAdmId" /> <input type="text" id="txtAdmPass" /> <input type="button" name="btnLogin" value="ログイン" onclick="fncLogin()"/> </form> </body> ■PHP(admLogin.php) <?php if(isset($_POST['btnLogin'])) { // A }else{ // B } ?> ログインボタン押下 ↓ fncLogin内からフォームをsubmit ↓ // A の処理に入ってくる想定なのですが、//B の処理が実行される。 ちなみに、ボタンのinput typeをsubmitにすれば//A の処理に入ってくるのですが、 javascript内からsubmitしたいため、困っています。 どこを間違えているのでしょうか。。

    • 締切済み
    • PHP
  • 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
  • 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となりテキストボックスは空になります。 以上よろしくお願いします。