2015-05-28 160 views
-1

我正在处理邮件联系表单,并在我提交并刷新邮件后继续收到我的电子邮件。我怎么能解决这个问题?我的代码如下。PHP联系表格提交

 <?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 = '[email protected]'; 
       $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

会话和令牌和重定向和重新验证形式。无法击败那个组合。 –

回答

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.'; 
    } 
+0

我的代码在哪里必须添加? – drizzyme

3

如果你想阻止的情况,其中用户通过刷新你的页面重新提交表单,一个不错的选择是重定向用户到完全相同的页面。这种方式在浏览器历史记录中的最后一个请求从POST更改为GET,刷新后只需重新加载页面而不用重新提交表单。

这可以用下面的代码来实现:

 header("HTTP/1.1 302 Moved Temporarily");   
     header("Location: the-url-of-the-page.php", true, 302); 
     header("Connection: close"); 
     exit(); 

请确保代码处理表单(发送电子邮件)之后,但任何数据发送到浏览器之前执行。

+0

什么是标题的默认重定向代码?我猜这是默认的302。 –

+0

是的,默认情况下是302,但是1)我从不信任PHP从版本更改为版本2)我每次看到代码都清楚地看到它,并且不需要查阅文档以便记住。 –

1

或者,当你发出的邮件,并感谢用户如果分支,可以取消设置POST变量如下,

unset($_POST['contact_name']);