アプリ版:「スタンプのみでお礼する」機能のリリースについて

簡易メール問い合わせフォームを作成しています。
問い合わせ内容を記述後、submitしたら、CGIでメールを送信し、別のページ(「送信完了」ページ)へ飛ばしています。

このとき、送信完了ページから、元の問い合わせページへ「戻る」ボタン等を使用して戻った場合、input内に記述されたテキストがそのまま残っています。

この状態でまたsubmitすると、全く同じ内容のメールが送られてしまいます。

この連続投稿を防止したいのですが、何か簡単な策はないでしょうか?

それほど厳密な多重投稿禁止策でなくても構いません。
単純に「戻る」を使用したときにフォーム内容がクリアされていれば良いのですが、、、、
ページ読み込み時にjavascriptにて全てのフォーム内容をクリアしても、「戻る」ボタン使用時には実行されません。

送信元IPを見て連続投稿を禁止するという策も考えましたが、正直そこまでする必要があるかどうか疑問です。

戻るを押したときにフォームがクリアされていれば良いです。
どうかよろしくお願いします。

A 回答 (4件)

メール内容入力とメール送信の間にメール内容確認画面を入れて、


メール内容入力からメール内容確認への値の受け渡しを Session で行います。そして、メール送信完了画面にて Session の値をクリアします。

このような処理にすれば、メール内容確認画面の最初で Session 値をチェックすれば
連続投稿も不正アクセスも禁止することができます。

でもこの方法は簡単ではないですね...orz
    • good
    • 0

ちょっと質問者の意図とは(別画面にしているので)違いますが、


このようにしてみたらどうでしょう。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=SHIFT_JIS">
<title>送信後のフォームのクリア</title>
<script type="text/javascript"><!--
var time_id=0;
function clear(){
document.FORM1.reset();
clearTimeout(time_id);
}
//-->
</script>
</head>
<body >
<form name="FORM1" method="POST" action="mail.cgi" target="_blank" onsubmit="time_id=setTimeout('clear()',10);">
<input type="text" name="address" value="">
<input type="submit" value="送信">
</form>
</body>
</html>
    • good
    • 0
この回答へのお礼

試してみましたが、ダメでした。
submitする前に、フォーム内容をクリアしているようですが、うまくいきません。

onsubmitの前に、actionを実行しているようです(?)

ありがとうございます。

お礼日時:2006/08/05 10:56

送信完了画面でブラウザの再読込ボタンを押すと、再送信するわけですが、、、


それはいいのでしょうか?

この回答への補足

送信完了画面は、別URLになっています。
再読み込みしても、再送信はしないようになっています。

問題は、そのHTMLから、元のフォームを含むHTMLへ戻った際のフォーム内容のクリアです。

補足日時:2006/08/05 10:35
    • good
    • 0

#2>試してみましたが、ダメでした。


ウチでIE6, Firefox1.5 で試してみたところでは、クリアできるようなんですが。

#2>onsubmitの前に、actionを実行しているようです(?)
onsubmit の前にaction を実行すると言うことはありません。
する前にイベントが起こって実行されるので、(でないとイベントから送信をキャンセルできないことになるので)

clear() をclearForm() にしてみるとか
setTimeout('clear()',500);
にしてみる(数字を大きくする)とか試して貰えますか?

#2の要点は、送信完了の画面を別ウィンドウで表示する
そして、元のウィンドウのフォームを時間を置いてクリアするというものです。
    • good
    • 0

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