Web.fla

主食は、html/css/php/javascript(jQuery) デザートはactionscript!WEBに関することをメモってくサイト

*

【PHP】PHPでリロード対策をして二重投稿を防止しよう

      2015/02/19

phpでフォームとか作ってデータを送信できた!!!って喜んでるのもつかの間(笑い)、送信ボタンを押した後、リロードすると「フォームデータ再送信」メッセージが出て二重にデータが投稿される事があります。

まー昔からある内容なんですが、ちょっとPHPを弄ってないんで練習がてらひとこと掲示板的なものを作ってのでPHPのリロード対策をして二重投稿を防止しようってことでメモっておこうかと。

原因と対策

なぜリロードによる二重投稿が起こるのか?

ブラウザ更新ボタンをクリックすると直前の動作を再実行するので、直前にデータを投稿していればPOSTメソッドでパラメータが送信されているため、再度POSTが再送されることになり二重投稿なります。

リロード対策

リロードによる二重投稿防止するには、ページ遷移による対策一般的?な気がしますが、今回もその方法です。(笑)

今回は、ひとこと掲示板のようなものを作りたかったので「keijiban.php」をしています。

全体のプログラムは端折ってますが、「$_SERVER[“REQUEST_METHOD”]」を調べることでPOSTかGETかどちらで要求が来ているかを調べてPOSTだった場合には以後の処理をするようにしています。

その処理の最後に、header関数で自分自身にリダイレクトしています。

ここでちょっとした注意点ですが、header関数でlocationで指定するファイルのパスは絶対パスではないといけません。

なぜheader関数かというと、header関数を用いて違うページに飛ばすとGETを実行するため、リロードしても最後に実行されたのがGET送信になっています。

そのため、下記のように最初にPOSTで実行されたかどうかを判別しているので、たとえリロードしても最後に実行されたのがGETになっているため二重投稿が起こらなくなるという仕組みです。

 - php

     

Comment

  1. […] 以下のサイトが非常にわかりやすく、参考にしました。 引用元 【PHP】PHPでリロード対策をして二重投稿を防止しよう […]

  2. […] POST送信後もセレクトボックスの値を保持 【PHP】PHPでリロード対策をして二重投稿を防止しよう […]

  3. […] POST送信後もセレクトボックスの値を保持 【PHP】PHPでリロード対策をして二重投稿を防止しよう […]

Message

  関連記事

【PHP】WebサービスのAPIを使ってCSVファイルを作ってみた!

久々にPHPのネタでも書こうかと。 PHPとってもここ最近いろんなWebサービス …

【PHP】 scandirによるフォルダ内のファイル一覧を表示する

フォルダにあるファイルを取得して表示する処理、例えば画像一覧を表示するどありそう …

PHPでフォームから入力された文字列が全角・半角スペースのみの場合のチェック

検索すれば、沢山でてくると思うけど、よくフォームで入力した値をphpでチェック( …

【PHP】サムネイル画像を作成・保存

よくプロフィール画像をアップしたりするとサムネイル画像を表示するときがあると思う …

【PHP】sessionの完全な破棄

よくあるログインすると「~~様こんにちは」みたいなログイン情報を保持して破棄する …

PHPでユーザーエージェントを判別

前回はjavscriptでユーザーエージェントを判別していたが、PHPもついでに …

no image
hidden タグで配列を送信するには?

フォームなどでチェックボックスでチェックを入れた値は「$_post」で受け取れる …

phpでfor文で列で横並びさせるときに左のみマージンをなくす

まぁある案件で、画像ギャラリーをphpで管理していたときにcsvデータからデータ …

【PHP】URLを分解して配列で取り出すには?

PHPでプログラムをするとやっぱURLって結構いじるときありますよね。 例えば、 …

【wordpress】個別記事ページでアイキャッチ画像に元画像へのリンク張るには?

まぁwordpress最近全く弄ってません。なぜなら最近は、すばらしいテーマがあ …