因此,我已经进行了所有设置,以便提交我的联系表,并且在收件箱中收到一封电子邮件。他们的问题是,每次刷新页面或返回页面时,我的收件箱中都会收到同一封电子邮件的另一个副本。
如何确保只收到一封电子邮件,并且确保用户在编写并成功发送所需的邮件后不会意外地继续向我发送邮件。
我也很想知道如何确保成功消息不会一直显示。
如果有帮助,这是我的PHP和jQuery代码:
PHP:https://www.tehplayground.com/Z7mCYfoSz09WEEVj
jQuery:https://www.tehplayground.com/cN9U4HpE0J5czkyS
感谢您的帮助!
答案 0 :(得分:0)
您可以将用户重定向到另一个页面,它将“重置”表单请求:
header("Location: index.php");
答案 1 :(得分:0)
document.onload = function () {document.getElementById("form").reset();}
答案 2 :(得分:0)
$("#refresh").click(function(){
$("#myModal").find('input:text, input:password, select, textarea').val('') ;
$("#myModal").find('input:radio, input:checkbox').prop('checked', false);
$("#weak").html('') ;
$("#moderate").html('') ;
$("#strong").html('') ;
$("#show_error").html('') ;
$("#show_success").html('') ;
$("#new_password").attr("disabled", "disabled") ;
$("#confirm_password").attr("disabled", "disabled") ;
$("#reset_pass").attr("disabled", "disabled") ;
});
使用上面的内容,它将重置一个表单。
答案 3 :(得分:0)
如果您使用邮政提交表单,这是一个常见问题。如果用户在提交后意外刷新页面。它可能会导致表单提交重复。阅读更多有关后重定向获取模式here的内容,以清楚了解正在讨论的内容。因此,简而言之,此处的基本过程是在提交到其他页面或同一页面后重定向页面。像这样
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["name"])) {
$error .= "<p>• Don't forget to write your name!</p>";
} else {
$name = test_input($_POST["name"]);
}
if (empty($_POST["email"])) {
$error .= "<p>• An email address is required. </p>";
} else {
$email = test_input($_POST["email"]);
}
if (empty($_POST["phone"])) {
$phone = "";
} else {
$phone = test_input($_POST["phone"]);
}
if (empty($_POST["message"])) {
$error .= "<p>• Don't forget to write your message!</p>";
} else {
$message = test_input($_POST["message"]);
}
if ($_POST["email"] && filter_var($_POST["email"], FILTER_VALIDATE_EMAIL) === false) {
$error .= "<p>• Please input a valid email! </p>";
}
header('Location: index.php');// redirect so that the pages is recieved through get method
exit()
//note that if you are redirecting to the same page you wont be able to use variable, you can instead use session knowing that the page refreshess
}
?>
答案 4 :(得分:0)
我认为处理此问题的最佳方法是为每个提交创建唯一的标识符。
foreach($_POST as $data){
$s = md5($s . $data);
}
现在$s
的长度为32个字符,几乎对任何输入都是唯一的。
您有多种选择:
您可以将此值插入到一个表(2列)中,其中1是该值,另一个是插入日期,并在1天后删除记录。
使用会话并将此ID附加到数组(并不时重置)
任何其他存储方法,请记住,将其存储在客户端不是最佳的存储方法。
这几乎消除了重复提交。但是,这或多或少是一个示例代码,旨在为您提供总体思路。也许不是所有字段都应该使用,也许您也想为其添加一个date()
。
一切取决于您的需求。
您可以使用其他技术来执行相同的操作,但是这应该由服务器而不是客户端来处理。因此,使用Javascript可以逃脱,只是不是永久的解决方案。
答案 5 :(得分:0)
谢谢。得到排序!
我最终将PHP分为“ process.php”和“ form.php”,这有助于阻止重复项,然后使用AJAX有效刷新和保留表单,而无需刷新整个页面。 / p>
现在一切正常,尽管很难说它是否安全!
答案 6 :(得分:-1)
最好的方法是使用JQuery提交表单并通过电子邮件发送并重置它,而无需刷新页面。不要使用“ form”标签,而要使用同一类的“ div”标签,否则页面将刷新,并且将调用click事件。