PHP / jQuery скрипты формы, отправляющие дубликаты писем? - PullRequest
0 голосов
/ 03 октября 2011

Я пытался решить эту проблему или найти похожую проблему, но я все еще ломаю голову над этой.

У меня есть 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 ]

1 голос
/ 03 октября 2011

Похоже, что форма отправляется дважды.Один раз по почте, затем по вызову AJAX.Вы можете придерживаться вызова ajax и не использовать тег формы, а затем использовать кнопку, отличную от кнопки submit, для вызова вызова ajax.

0 голосов
/ 28 ноября 2011

Оказывается, что-то происходило на стороне сервера, а не в моем коде.Я переместил код на другой сервер и не испытал никаких проблем.

0 голосов
/ 03 октября 2011

Возможно, вам повезет больше, если вы будете использовать метод 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();
});

Я думаю, что это заставит послать письмо один раз.

0 голосов
/ 03 октября 2011
  1. Кажется, ваш php-скрипт вызывается дважды.Проверьте это с помощью firebird.Если вы используете тип кнопки отправки, вам следует отключить ее функциональность по умолчанию, например: $('#submit').click(function(event) {<br> event.preventDefault();<br> // rest of your code<br> });
  2. Не используйте $_REQUEST, вместо этого используйте $_POST.
  3. Проверьте, если $_POST переменные не пусты перед отправкой электронного письма.
0 голосов
/ 03 октября 2011

В вашем MailHandler вы должны проверить, не являются ли нужные переменные пустыми, перед отправкой электронного письма.

Если переменные пусты (http://php.net/empty), то вам не следуетотправьте письмо. Возможно, антивирус (например, Trend Micro) проверит страницу, чтобы убедиться, что на ней нет вирусов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...