PHP联系表单提交

时间:2015-05-28 14:26:36

标签: php forms contact

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

        <?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';
            }
        }

        ?>

3 个答案:

答案 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']);