プロが教えるわが家の防犯対策術!

現在PHPとMYSQLを使ってサイトを作っています。
そこで、テーブルの追加をinsert文を使って実行し、
追加されたテーブルをselect文で表示させるということをやっています。

現在はhoge.htmlでフォーム側を記載し、hogehoge.phpで受け取り、データを追加、表示させるようにしています。

登録作業の方は問題なく実行されるのですが、
登録されたデータがhogehoge.phpをリロードする度に永遠と同じデータが追加され続けてしまう現象がおきています。(auto_incrementに指定しているidだけがかわる)
データを登録し終わると次にリロードしてもデータが追加されないようにするにはどのようにすればよいのでしょうか。

ご教授御願いいたします。

A 回答 (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の方法が好きですが、この場合はダブルクリックには対応できませんので気をつけてください。
    • good
    • 0
この回答へのお礼

親切にご回答頂き有り難うございます。
もう少し自分なりに勉強することが必要のようです。
頑張ってみます。

お礼日時:2007/10/24 10:24

phpのバージョン等にもよると思いますが、私もphp初心者の頃、同様の問題に当たり、参考urlのリロードクラスを使わせていただきました。


これがそのまま使用できるかどうかは不明ですが、このソースコードがやらんとしていることを理解することで、リロードや戻るボタンへの対策が取れると思います。
難しいかもしれませんし、簡単かもしれませんが、是非ソースコードを解析してみてください。

参考URL:http://www.stackasterisk.jp/tech/php/php03_01.jsp
    • good
    • 0
この回答へのお礼

親切に教えて頂き有り難うございます。
今少し時間が無く試せていないのですが、使わせて頂こうとおもいます。

お礼日時:2007/10/24 10:23

特定のフィールドにユニーク属性をつけてみてはどうでしょう?

    • good
    • 1
この回答へのお礼

ご回答有り難うございます。まだ具体的なことが分かりませんので、勉強します。

お礼日時:2007/10/24 10:21

hogehoge.phpの処理でhoge.htmlからデータが来ていない場合は


テーブル追加をさせない様にすればいいんじゃないですかね?

この回答への補足

早速回答頂き有り難うございます。
「hogehoge.phpの処理でhoge.htmlからデータが来ていない場合は
テーブル追加をさせない様に」
出来れば良いのですが、
初心者なもので、コードの書き方が分かりません。
何かヒントのようなものでも与えて頂けないでしょうか。
宜しく御願いいたします。

補足日時:2007/10/16 19:29
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!