3

サブスクライブ スクリプトを使用して、ユーザーの電子メール アドレスを mysql レコードに追加しています。このプロセスには以下のコードを使用しました。ユーザーが電子メールを送信した後、ページが更新され、データベースも mysql に更新されます :-) 。しかし、問題は、電子メールを送信した後にページを更新すると、適合フォームの再送信ダイアログが表示されることです。[続行] ボタンをクリックすると、同じ電子メール (重複) が新しいレコードで更新されます。私のデータベースは同じ電子メール アドレスで更新されます。私がページを更新したとき。このメッセージを無効にして、mysql で同じ重複レコードの更新を停止する方法。

<form id="myForm" action="" onsubmit="return validateForm();"method="post">
    <input type="hidden" name="action" value="update" />
    <input type="text" name="email" id="email" value="Enter your email here" onfocus="if (this.value == 'Enter your email here') {this.value = '';}" onblur="if   (this.value == '') {this.value = 'Enter your email here';}" onwebkitspeechchange = "this.value = this.value.replace('Enter your email here','')" style=" margin:0px 0px 0px 26px;color:#999; border:4px solid #bbb;border-radius:6px;font-size:1em;width:260px;height:30px; font-style:italic; font-family:"Times New  Roman", Times, serif;"/>
    <br>
    <center>
        <input class="button" type="image" src="rss.png" />
    </center>
</form>
<?php
    $email = $_POST['email'];
    mysql_connect ("localhost", "root", "") or die ('Error: ' . mysql_error());
    mysql_select_db ("test"); 
    $query="INSERT INTO newsletter_emails (email)VALUES ('".$email."')";
    mysql_query($query) or die ('Error updating database');
?>
<script>
function validateForm() {
    var x = document.forms["myForm"]["email"].value;
    var atpos = x.indexOf("@");
    var dotpos = x.lastIndexOf(".");
    if (atpos < 1 || dotpos < atpos + 2 || dotpos + 2 >= x.length) {
        alert("Not a valid e-mail address");
        return false;
    } else {
        alert("thankyou");
    }
}
</script>
4

2 に答える 2

6

フォームを送信したら、後で標準のリダイレクトを行います。そうすれば、リダイレクトで POST 情報が送信されなくなります。エラーメッセージなどを保存する必要がある場合は、セッションを使用してください。

于 2012-07-13T11:33:53.663 に答える
2

また;

  • 別のページに移動

  • AJAXを使用して挿入し、AJAXでユーザーに通知します

  • フォームがすでに投稿されているかどうかを判断するための何らかのチェックを作成します (送信ボタンに値が含まれているかなど)。

于 2012-07-13T11:36:07.267 に答える