• ベストアンサー

二重投稿防止方法

PHP3でメールフォームを作っています。 メールを送信後、リロード等を行うと同じメール内容が何通を送られてしまいます。 何とかして、制御したいのです。 なんか、いい二重投稿防止方法がありましたらお願いします。

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

  • ベストアンサー
  • Kizz
  • ベストアンサー率47% (30/63)
回答No.1

はじめまして、webmonkeyさん。 これは・・、    送信処理を行うphpページを表示(アドレスバーに入力)状態で、リドロー  (更新や再読込み、アドレスバー上でリターン)された場合  ※送信処理と完了アナウンスが同phpページに書かれている場合。 の解決という事であれば、2通り浮かびます。 案1)クッキー使用 案2)header()という関数を使用 案2の方が楽でかつ問題もないので、これをおススメします。 ・ページとしては3ページ用意   P1. 入力フォーム(送信ボタンおき)   P2. 送信実処理およびheader()文のみ※HTMLタグは一切かかずphpコードのみ   P3. 完了アナウンスページ ・header()の指定は、「header("Location: XX.phtml");」  ※XX.phtml にP3を指定。(htmlファイルでもいいですし、引数指定も可能) 補足)   header()を呼び出したページはhistory(履歴)情報に残らないという特徴があります。   その為、たとえブラウザで「戻る」指定されても、送信実処理ページはもどらず、   入力フォームに戻ります。   ※この対処方法は、ただ送信処理と完了アナウンスをページ分けしただけではありません。   ※入力フォーム上から再「送信」は、この対処方法では回避は無理です。    ちょっと本題からは外れた操作ですし。   注)header()呼出前に標準出力があると、header()はうまく動作しません。     <? ?>以外でHTMLタグ、ただの改行がはいっただけでも駄目なので注意して下さいね。 備考)  ・案1のクッキー使用では、ブラウザの戻るやリドローに関係なくクッキーは最新   の情報を保持しているため、1度送信処理したら、「もうこの送信処理はおわったよ」   と情報をクッキーに書いて、送信処理のphpコード部でこのクッキー値を参照し、   二重処理を行わないようにできます。   ※ただし、クッキーのクリアの確立とか色々面倒になると思うので、あまりおススメ    できないかな・・と。 他にも方法があるかもですが、参考までに。 頑張って下さい。

webmonkey
質問者

お礼

解答ありがとうございます。 参考になりました。 ご指摘とうり同一ページで作っていました。 案2)の方を利用して修正したいと思います。

関連するQ&A