发送重复电子邮件的PHP / jQuery表单脚本?

时间:2011-10-03 14:23:45

标签: php jquery forms email

我试图解决这个问题,或者发现类似的问题,但我仍然对这个问题感到头疼。

我有一个HTML表单,我正在使用jQuery函数进行验证,然后将其传递给PHP脚本进行邮件传递。我遇到的问题是一旦函数运行,就会发送重复的邮件,但第二个邮件是空白的,没有传递任何数据值。

jQuery:

$("#submit").click(function(){
    var quit = false;

    if(validateName()){
        name = validateName();
        $("label#name_error").fadeOut(0);
        $("label#name_error2").fadeOut(0);
    } else if (validateInput('name')){
        $("label#name_error").fadeOut(0);
        $("label#name_error2").fadeIn(250);
        quit = true;
    } else {
        $("label#name_error").fadeIn(250);
        $("label#name_error2").fadeOut(0);
        quit = true;
    }

    // several more validation checks for the other fields follow.

    if(quit){
        return false;
    }

    var dataString = "name=" + name + "&email=" + email; //and other fields inserted here

    $.ajax({
        type: "POST",
        url: "bin/MailHandler.php",
        data: dataString,
        success: function(){
            $('.error').fadeOut(0);
            $('#contact-form').clearForm();
            $('#contact').html("<div class='download-box'><h2>Thanks for contacting us!</h2><p>Someone will be in touch shortly!</p></div>").fadeOut(0).fadeIn(1500); 
        }
    });

    return false;

});

然后发送到 PHP (MailHandler.php):

<?php
    $to = "email@email.com";
    $from = $_REQUEST["email"];
    $subject = "Testing the form " . $_REQUEST["name"];
    $headers = "From: " . $_REQUEST["email"] . "\r\n" . "Reply-To: " . $_REQUEST["email"];

    $messageBody = "";  
    $messageBody .= $_REQUEST["name"] . "\n";
    $messageBody .= $_REQUEST["email"] . "\n";
    //and the other fields added similarly.

    if (mail($to, $subject, $messageBody, $headers)){
        echo ("Mail Sent");
    } else {
        echo ("Mail Failed");
    }

?>

一旦运行,一切似乎都正确处理,我收到成功消息,并收到包含所有正确数据的电子邮件。

几分钟后,第二封电子邮件到达,但没有表格中的数据。所有标题和数据值都是空白的。

我查看了代码,但我无法弄清楚第二条消息的来源。有没有人看到我错过的东西?任何帮助表示赞赏。

谢谢!

5 个答案:

答案 0 :(得分:1)

表单似乎已提交两次。一旦通过表单发布,那么一次通过AJAX调用。您可能希望坚持使用ajax调用而不使用表单标记,然后使用除submit按钮之外的按钮来调用ajax调用。

答案 1 :(得分:0)

在MailHandler中,您应该在发送电子邮件之前检查您所需的变量是否为空。

如果vars为空(http://php.net/empty),则不应发送邮件。防病毒(例如趋势科技)可能会检查页面以确保其上没有任何病毒。

答案 2 :(得分:0)

  1. 似乎你的php脚本以某种方式被调用了两次。使用firebird检查这个。如果使用提交按钮类型,则应禁用其默认功能,如下所示: $('#submit').click(function(event) {
    event.preventDefault();
    // rest of your code
    });
  2. 请勿使用$_REQUEST,而是使用$_POST
  3. 在发送电子邮件之前,请检查$_POST变量是否为空。

答案 3 :(得分:0)

如果您使用jquery .submit方法而不仅仅是点击事件,可能会有更多的运气,如下所示:http://api.jquery.com/submit/

所以对于你的代码:

//where #target is your form ID
$('#target').submit(function() {
  //your code
  return false;
});

$('#submit').click(function() {
 $('#target').submit();
});

我认为这会让它发送一次电子邮件。

答案 4 :(得分:0)

原来这是服务器端发生的事情,而不是我的代码。我将代码移到了另一台服务器上,没有遇到任何问题。