プロが教える店舗&オフィスのセキュリティ対策術

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

A 回答 (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コード部でこのクッキー値を参照し、
  二重処理を行わないようにできます。
  ※ただし、クッキーのクリアの確立とか色々面倒になると思うので、あまりおススメ
   できないかな・・と。

他にも方法があるかもですが、参考までに。
頑張って下さい。
    • good
    • 0
この回答へのお礼

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

お礼日時:2002/01/30 12:33

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