OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

二重投稿防止方法

  • すぐに回答を!
  • 質問No.207766
  • 閲覧数985
  • ありがとう数3
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 100% (2/2)

PHP3でメールフォームを作っています。
メールを送信後、リロード等を行うと同じメール内容が何通を送られてしまいます。
何とかして、制御したいのです。
なんか、いい二重投稿防止方法がありましたらお願いします。
通報する
  • 回答数1
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.1
レベル9

ベストアンサー率 47% (30/63)

はじめまして、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

お礼率 100% (2/2)

解答ありがとうございます。
参考になりました。
ご指摘とうり同一ページで作っていました。
案2)の方を利用して修正したいと思います。
投稿日時 - 2002-01-30 12:33:39
-PR-
-PR-
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ