- ベストアンサー
二重投稿防止方法
PHP3でメールフォームを作っています。 メールを送信後、リロード等を行うと同じメール内容が何通を送られてしまいます。 何とかして、制御したいのです。 なんか、いい二重投稿防止方法がありましたらお願いします。
- みんなの回答 (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コード部でこのクッキー値を参照し、 二重処理を行わないようにできます。 ※ただし、クッキーのクリアの確立とか色々面倒になると思うので、あまりおススメ できないかな・・と。 他にも方法があるかもですが、参考までに。 頑張って下さい。
お礼
解答ありがとうございます。 参考になりました。 ご指摘とうり同一ページで作っていました。 案2)の方を利用して修正したいと思います。