我正在处理邮件联系表单,在我提交并刷新邮件后继续查看我的电子邮件。我怎么能解决这个问题?我的代码如下。
<?php
if (isset($_POST['contact_name']) && isset($_POST['contact_email']) && isset($_POST['contact_text'])) {
$contact_name = $_POST['contact_name'];
$contact_email = $_POST['contact_email'];
$contact_text = $_POST['contact_text'];
if (!empty($contact_name) && !empty($contact_email) && !empty($contact_text)) {
$to = 'test@hotmail.nl';
$subject = 'Contact form';
$body = $contact_name."\n".$contact_text;
$headers = 'From: '.$contact_email;
if (mail($to, $subject, $body, $headers)) {
Echo 'Thanks for contacting me. I will be in touch soon.';
} else {
echo 'Sorry, an error occurred. Please try again later.';
}
} else {
echo 'All fields are required';
}
}
?>
答案 0 :(得分:3)
如果您想要阻止用户通过刷新页面重新提交表单的情况,一个不错的选择是重定向用户到完全相同的页面。这样,浏览器历史记录中的最后一个请求从POST更改为GET,并且在刷新之后只需重新加载页面而不重新提交表单。
这可以通过以下代码实现:
header("HTTP/1.1 302 Moved Temporarily");
header("Location: the-url-of-the-page.php", true, 302);
header("Connection: close");
exit();
请确保在处理表单(发送电子邮件)之后但在将任何数据发送到浏览器之前执行代码。
答案 1 :(得分:1)
您应该在处理表单后将用户重定向到另一个页面。发送电子邮件。
要重定向,您可以使用:
header("Location:thanks.php");
exit();
您的代码应更改为:
if (mail($to, $subject, $body, $headers)) {
header("Location:thanks.php"); //<-- Note change here
exit();
} else {
echo 'Sorry, an error occurred. Please try again later.';
}
答案 2 :(得分:1)
或者,在您发出邮件并感谢用户的if分支中,您可以取消设置post vars,如下所示,
unset($_POST['contact_name']);