联系表单提交两次电子邮件

时间:2012-08-21 23:13:36

标签: php html forms header double-submit-problem

我有一个基本的联系表单,它将用户的消息两次发送给显示表单的公司:一次包含所有正确的信息,一次文本字段为空白,即列出姓名,电子邮件,电话,消息但不包含任何信息。我已经工作了好几个小时,无法弄明白。

在我页面的最顶部,我有这个标题:

 <?php
 ob_start();
 session_start();
 if( isset($_POST['submit'])) {
 if( $_SESSION['security_code'] == $_POST['security_code'] &&  !empty($_SESSION['security_code'] ) ) {
  // Processing
 header("Location:http://www.berrieswebdesign.com/business1 /thankyou.php?happymessage=thanks");
 unset($_SESSION['security_code']);

 } else {
 // Error Message
 header("Location:http://www.berrieswebdesign.com/business1 /thankyou.php?sadmessage=securitybreach");
    unset($_POST['submit']);

  }

  } else  {

  }
ob_flush();
 ?> 

使用Javascript:

 $(function(){
 $('#contact').validate({
 submitHandler: function(form) {
 $(form).ajaxSubmit({
 url: 'process.php',
 success: function() {
 $('#contact').hide();
 $('#contact-form').append("<p class='thanks'>Thanks! Your request has been sent.</p>")
 }
 });
 }
 });         
 });

和process.php      

 function GetHeaders()
 {
    $headers  = 'MIME-Version: 1.0' . "\r\n";
    $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
    // Additional headers
    $headers .= 'From: Company Name<info@companyname.com>' . "\r\n";
    return $headers;
 }
 // Get Data    
 $name = strip_tags($_POST['name']);
 $email = strip_tags($_POST['email']);
 $phone = strip_tags($_POST['phone']);
 $message = strip_tags($_POST['message']);

 // Send Message
    $headers = GetHeaders();
    $intro = "\"Thank you for contacting company name. We are very interested in assessing your situation and will be in touch as soon possible.\" <br />
    <br/>
    Best Regards,<br/>
    <br/>
    Company<br/>
    ";
 mail($email, "RE: Contact Form Submission", $intro, $headers);
 mail("me@yahoo.com", "Inquiry", "Name: {$name}\n Email: {$email}\n Phone: {$phone}\n Message: {$message}\n");

 ?>

感谢您提前提供任何帮助。

2 个答案:

答案 0 :(得分:1)

您有两次调用mail功能。它应该只调用一次,看起来类似于:

mail($to, $subject, $message, $headers);

答案 1 :(得分:0)

修改:根据您添加到问题中的其他JavaScript代码...

问题可能表单是由两者 javascript和html提交的。如果您删除了javascript,表单可能仍会提交。这表明提交表单不需要javascript。但是,如果启用了javascript,则ajaxSubmit将运行,但这并不能阻止表单正常提交。如果您想停止提交表单,您需要说出以下内容:

在submitHandler上

return false;


无论表单是否已提交,您都可以运行该PHP代码,并且代码与表单所在的网页位于同一网页上。

这意味着只要用户首次显示表单,就会在用户提交表单后发送电子邮件。

要停止此操作,您可以:

  • 将表单提交到其他网页,然后移动将该电子邮件发送到该网页的PHP代码。
  • 或者你可以设置一个if guard,例如。 if ($name + $email + $phone + $message != "") { /* send mail here */}if (...)条件检查是否输入了任何数据。