• ベストアンサー

更新ボタンを押してもデータが更新されない方法

プログラミング初心者です。 INSERT INTOを使ってPHPからMYSQLにデータを書き込むページを作ったのですが、ブラウザの更新ボタンを押したり、戻るボタンでそのページにたどり着くと同じデータが再度書き込まれてしまいます。 このようにならないためにはどのように処理すればよろしいのでしょうか?一般的な方法を教えていただけたらありがたいです。 よろしくお願いします。

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

  • ベストアンサー
  • world99
  • ベストアンサー率64% (20/31)
回答No.3

こんにちは。 次の方法はいかがでしょうか? 1.入力画面で埋め込んだ重複しない文字列を処理チェック用文字列として保持する。 2.完了画面に移動した時に、セッションに保持した処理チェック用文字とリクエストの処理チェック用文字が一致しなければ登録処理を行う。 3.登録処理後に、その文字列をセッションに保持する。 以下は、その実装サンプルです。ご覧ください。 <PHPファイル1> 1.入力画面表示 2.PHPで登録処理チェック用の非表示データ埋め込みを行う。 3.JavaScriptでボタン2度押し防止処理を実装する。 <html> <head> <meta http-equiv="Content-Language" content="ja"> <meta http-equiv="Content-type" content="text/html; charset=utf-8"> <title>q7810942-Input</title> <script type="text/javascript"> function onSubmit() { document.forms[0].action = "q7810942-02.php"; document.forms[0].submit(); document.getElementById("go").disabled = true; return true; } </script> </head> <body> <h3>Input Page</h3> <form action="javascript:onSubmit();"> <input type="hidden" name="token" value="<?php echo(date("YmdHis")); ?>" /> <input type="submit" id="go" /> </form> </body> </html> <PHPファイル2> 1.データ登録処理 2.完了画面表示 <html> <head> <meta http-equiv="Content-Language" content="ja"> <meta http-equiv="Content-type" content="text/html; charset=utf-8"> <title>q7810942-02</title> </head> <body> <h3>Complete Page</h3> <?php session_start(); echo("REQUEST: ".$_REQUEST["token"]."<br>"); echo("SESSION: "); if (isset($_SESSION["token"])) { echo($_SESSION["token"]); } echo("<br>"); if (!isset($_SESSION["token"]) || $_REQUEST["token"] != $_SESSION["token"]) { // DBインサート処理 echo("DBインサート処理実行<br>"); $_SESSION["token"] = $_REQUEST["token"]; } ?> </body> </html>

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • thezen5
  • ベストアンサー率84% (27/32)
回答No.2

1さんの言うようにajaxで書き込み行いページ移動をしない方法、 あるいは簡単な方法としてインサート後 location.replace で履歴を上書きして他のページを出力してしまう方法、 などです。 <?php インサート処理 ?> <html> <head> <script language="javascript"> <!-- location.replace('finish.html'); //--> </script> </head> <body> </body> </html>

全文を見る
すると、全ての回答が全文表示されます。
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

確認ページをつくってセッション処理をするか 更新をajaxなど非同期処理でおこなう

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • PHP+MySQLで、MySQLデータをブラウザで表示→ブラウザからデ

    PHP+MySQLで、MySQLデータをブラウザで表示→ブラウザからデータをアップデート→ブラウザを更新して再表示したいのですが、データをアップデートしたあと、ブラウザで表示してもすぐに反映されません。 「あれ?」と思ってmysqladminでDBを見ると、アップデートはされています。そしてしばらくして再度ブラウザを更新すると、アップデートが反映された状態で表示されます。 すぐにアップデートを反映させたいのですが、どうすればよいでしょうか。 phpで、update処理の後、 mysql_close($conn); と書いていますが、これだけではいけないのでしょうか。 よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • mySQLへのデータ接続全般について

    現在独学でPERL MYSQL PHPを学んでおります。 MYSQLからPHPにデータを書き込ませる、読み込ませるといった場合、 $sql="insert into~";とかpost getで投げるなどの決まりの構文があるとゆうことまでは理解できます。PERLをMYSQLに投げる場合も同じように考えたらいいのでしょうか?いろいろなサイトをあさってみても構文例がややこして理解できません。 超初心者ですので、とてもわかりやすく教えてくれるサイトなどありましたら教えてください。

    • ベストアンサー
    • Perl
  • データの更新方法について

    データを更新するときSQLで DeleteしてInsertする更新方法と Updateを行う更新方法とがあると思うのですが この使い分け、切り分けはどういう視点になるのでしょうか 私はDeleteしてInsertする方が簡単なので Delete + Insertをよく使っています。

  • ブラウザの更新ボタン

    フォームでデータを送信した後に、ブラウザの更新ボタンを押すとデータが再送されますが、サーバ側で違いのチェックをPHPで出来ますか? よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • MySQLでのバイナリデータ削除方法

    MySQLでのバイナリデータ削除方法 現在、PHPとMySQLでデータベースを作っている初心者です。 MySQLに登録したBLOB型のバイナリデータ(jpeg画像)を削除することはできるのでしょうか。 PHPMyAdminではレコード自体は消せますが、バイナリデータについては編集不可となっています。このフィールドのみ空にすることはできるのでしょうか。 考え方、方法などご教示ください。 上書きでNULLをインサートする??のかとも思うのですが、よくわかりません。 MySQL 5.1.34 PHP 5.2.6

    • ベストアンサー
    • MySQL
  • phpでのSQLでのデータの追加方法

    phpでのSQL実行に関して、下記のデータを追加するコードがあります。 mysql_query('INSERT INTO my_items SET maker_id=1, item_name="もも", price=210, keyword="缶詰,ピンク,甘い", sales=0, created="2010-08-01", modified="2010-08-01"') or die(mysql_error()); echo 'データを挿入しました'; 私は。それを INSERT INTO (フィールド名) VALUES(値) のSQL文で実行したいのですが、その方法が分かりません。 よろしければ、それを実行するコードを教えてください。お願いします。

    • ベストアンサー
    • PHP
  • データの更新

     失礼いたします。 JAVA初心者のjavateaです。 フォームからデータを入力してDBの更新を行いたいと思い、次のような計画を立てています。 1、フォームを作る 2、PHPでのMySQLへの接続法に倣い(PHPの参考書のみあるので)javaで接続。 3、フォームから値の受け渡しを作り、それに応じたSQL文を発行させる。 4、recurseし、自動的に更新する。 ここで、一番問題になるのは2番です。 タグ文章にjavaを埋め込む形でPHPと同じようにいくものなのでしょうか?javaでDBに接続を行いテーブルを表示することは出来ますので、データそのものを書き換える方法を教えていただければと思います。 よろしくお願いします。。('-'。)(。'-')。

    • ベストアンサー
    • Java
  • insert into $DB (data1, data2) values (\"$data1\", \"$data2\")で変数扱いされません

    $sql = "insert into $DB (data1, data2) values (\"$data1\", \"$data2\") ; PHPにてMySQLを操作していますが、上記のように insertする項目の文字列に数字が入ると insertする際に、data1がそのままdata1として書き込まれてしまいます。 $sata1 = 'text or int'; data1 = $data1; として書き込みたいのですが… アドヴァイスお願い致します。

  • 複数行のデータ一括更新に関して

    教えて下さい。 ある表をループで回しながら作成していますが、そこに表示/入力 された情報をボタン1つで更新させたいと考えています。 更新処理はPOSTで送った次のページ(a.php⇒b.php)でしたいと考えて いますが、それらループ処理で作成されたデータをどのように次へ渡し たら良いかわかりません。 固定の表であれば、それぞれに名前を付けてPOSTしてやれば良いかと 思いますが、ループ処理している場合は全てのデータを b.php へ 渡す事はできないのでしょうか。。。

    • ベストアンサー
    • PHP
  • MySQLに100万件登録する最も効率の良い方法

    A(600)xB(800)xC(3)で144万件の作成してMySQLへ登録したい のですが、最も効率良く登録する方法は何でしょうか? 私がとりあえず思いつくのは、下記2つのうち案2)です。 案1)プログラム&MySQL 1.PHPなどのプログラムのループ処理でテストデータを作成 2.mysql>LOAD DATA INFILE "/path/to/file.csv" INTO TABLE tablename FIELDS TERMINATED BY ","; 懸念点:メモリが足りず小分けにしないとインポートできなそう。 案2)プログラムのみ 1.PHPなどのプログラムのループ処理でテストデータを作成し、   1つのINSERT文で、1000件ぶんを一気にコミット 例:INSERT INTO table (a,b,c) VALUES (1,1,1),(1,1,2)・・・