如何在刷新页面时停止“确认表单重新提交”对话框

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>

3
请勿在新代码中使用mysql_*函数。它们已不再维护,社区已经开始弃用过程。看到红框了吗?相反,您应该了解预处理语句,并使用PDOMySQLi。如果您无法决定,这篇文章可以帮助您选择。如果您想学习,请参阅这个良好的PDO教程here is good PDO tutorial - Manse
2个回答

6

当您提交表单时,请在之后执行标准重定向。这样,重定向时不会发送任何POST信息。如果您需要存储诸如错误消息之类的内容,请使用会话。


2

有三种方式:

  • 转到另一个页面

  • 使用AJAX插入并使用AJAX通知用户

  • 创建某种检查以确定表单是否已经提交(例如,提交按钮是否包含值)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接