現在PHPとMYSQLを使ってサイトを作っています。
そこで、テーブルの追加をinsert文を使って実行し、
追加されたテーブルをselect文で表示させるということをやっています。
現在はhoge.htmlでフォーム側を記載し、hogehoge.phpで受け取り、データを追加、表示させるようにしています。
登録作業の方は問題なく実行されるのですが、
登録されたデータがhogehoge.phpをリロードする度に永遠と同じデータが追加され続けてしまう現象がおきています。(auto_incrementに指定しているidだけがかわる)
データを登録し終わると次にリロードしてもデータが追加されないようにするにはどのようにすればよいのでしょうか。
ご教授御願いいたします。
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
フォームからhogehoge.phpへPOSTを使ってデータを送っていると思いますが、この場合はリロードするたびにPOSTのデータが送られるのでINSERTが繰り返されることになります。
この問題の対策としてはいくつかの方法が考えられます。
1.セッションに情報を保持する
一度INSERTしたら、そのデータを一意に認識できる情報(プライマリキーなど)をセッションに保持しておきます。次にINSERTが要求されたときにセッション内に同じ情報があるか確認し、存在すればINSERTしないようにします。
もしプライマリキーが自動的に連番を割り当てるタイプのものでしたら、フォームに予めランダムなIDをhiddenタグで入れておく必要があります。このランダムなIDを割り当てる方法はNo2やNo3の方が仰っているのと同じです。
2.リダイレクトを利用する
リロードによって再度POSTされることが問題になるので、リダイレクトを利用して重複したPOSTを避ける方法です。これは、hogehoge.phpをPOSTで呼び出されたらINSERTとhogehoge.phpへのリダイレクトを、GETで呼び出されたらリストの表示を行うというようにします。こうすればリロードしてもGETが呼び出されるだけですので、再度INSERTされることはありません。
個人的には2の方法が好きですが、この場合はダブルクリックには対応できませんので気をつけてください。
No.3
- 回答日時:
phpのバージョン等にもよると思いますが、私もphp初心者の頃、同様の問題に当たり、参考urlのリロードクラスを使わせていただきました。
これがそのまま使用できるかどうかは不明ですが、このソースコードがやらんとしていることを理解することで、リロードや戻るボタンへの対策が取れると思います。
難しいかもしれませんし、簡単かもしれませんが、是非ソースコードを解析してみてください。
参考URL:http://www.stackasterisk.jp/tech/php/php03_01.jsp
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript javascriptでテーブルに追加した項目のid追加してローカルストレージを操作したい 5 2023/01/01 15:52
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Access(アクセス) Access 登録ボタンからサブフォームの更新 1 2022/07/22 10:23
- PHP PHP ページング データベース 1 2022/06/16 10:30
- Access(アクセス) Dlookupにエラーがでてしまう 1 2022/10/31 14:35
- Visual Basic(VBA) ユーザーフォームでのリストボックス連動(VBA) 3 2022/11/28 11:41
- Excel(エクセル) Excel ドロップダウンリスト(入力規則)に関してです データの入力規則で元データ79000行のド 3 2023/07/17 10:06
- PHP php my adminより取り出したデータ表示 2 2022/06/15 11:56
- PHP PHP MySQLに画像を直接保存 2 2022/06/05 11:50
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessでデータシートに同じデ...
-
Accessのテーブルデータを一気...
-
このISAMでは、リンクテーブル・・
-
Oracleで上書きImportはできま...
-
処理の途中で停止させ、再開さ...
-
Accessのインポートについて(上...
-
Access VBAからエクセルに出力...
-
構文エラー : 演算子がありませ...
-
同一テーブルのデータを参照し...
-
マテリアライズドビューとスナ...
-
結合テーブルでINSERTする方法...
-
ERROR1062:Duplicate entry.......
-
ORA-01401が表示され、データが...
-
[mysql]selectが遅い場合と早い...
-
SQL文の結合(一対多)がわから...
-
Pervasive.SQLについて
-
MS Accessを共有した際にファイ...
-
DBアプリケーションの設計方針 ...
-
アクセス レコードセットを更...
-
「クリップボードにコピーされ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessでデータシートに同じデ...
-
Accessのテーブルデータを一気...
-
テーブルで一番古いレコードだ...
-
ビューのソートについて
-
Oracleで上書きImportはできま...
-
結合テーブルでINSERTする方法...
-
accessでレコード更新直後の反...
-
このISAMでは、リンクテーブル・・
-
アクセス レコードセットを更...
-
重複クエリを使ったデータ削除
-
処理の途中で停止させ、再開さ...
-
マテリアライズドビューとスナ...
-
同一テーブルのデータを参照し...
-
ERROR1062:Duplicate entry.......
-
「クリップボードにコピーされ...
-
ORA-01401が表示され、データが...
-
ACCESSで容量が50MBになった...
-
Accessでの稼働日数計算の方法
-
構文エラー : 演算子がありませ...
-
MS Accessを共有した際にファイ...
おすすめ情報