【问题标题】:Contact form submitting twice to email联系表格提交两次到电子邮件
【发布时间】:2012-08-21 23:13:36
【问题描述】:

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

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

 <?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");

 ?>

提前感谢您的帮助。

【问题讨论】:

  • 您是否尝试仅使用一个 mail() 函数。每个人都发送一封电子邮件...
  • 确定不是在第一次加载页面时调用它(在任何数据输入之前)?
  • 这不是因为邮件被调用了两次,一次向用户发送回复消息(以确认表单提交)
  • Alfabrava- 你能详细说明一下吗?不知道你的意思
  • 如果用户只收到一封电子邮件(下面的评论),那么您上面的代码没有错误。也许您在其他地方有另一个邮件电话或其他什么?要查看是否是这种情况,请尝试将// mail("me@yahoo.com"... 注释掉,看看您是否仍有空白电子邮件。

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


【解决方案1】:

您有两次调用 mail 函数。它应该只被调用一次并且看起来类似于:

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

【讨论】:

  • 错了!其中一个邮件呼叫将其发送给用户,只有一个邮件呼叫将其发送给公司。这不是因为邮件函数有两次调用。
  • 是的,一封邮件发给用户(他们只收到一封),一封发给公司(他们收到一封空白,一封已完成)。
【解决方案2】:

编辑:基于您添加到问题中的其他 javascript 代码...

问题可能是表单是由 javascript 和 html 提交的。如果您删除了 javascript,表单可能仍会提交。这表明不需要 javascript 来提交表单。但是,如果打开了 javascript,则 ajaxSubmit 将运行,但这也不会阻止表单正常提交。如果您想阻止表单提交,您需要这样说:

return false; 在 submitHandler 上。


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

这意味着每当用户首次显示表单时以及用户提交表单后都会发送一封电子邮件。

要阻止这种情况,您可以:

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

【讨论】:

  • 我删除了 javascript 并且表单有效,但仍然向公司提交了两次 - 我正在编辑上面的代码以显示我为验证码实现的标题......也许这是干扰或也许我可以在其中添加 if/else 语句?
  • 我分离了两个邮件函数,添加了一个包含在 process.php 中的 message.php。还是没有运气!
猜你喜欢
  • 2021-08-06
  • 1970-01-01
  • 1970-01-01
  • 2021-09-24
  • 2019-11-22
  • 2017-10-19
  • 2013-08-16
  • 2021-05-08
  • 1970-01-01
相关资源
最近更新 更多