Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 24.03.2019, 20:12
Аспирант
Отправить личное сообщение для Timurkin Посмотреть профиль Найти все сообщения от Timurkin
 
Регистрация: 12.08.2017
Сообщений: 50

Отправка с разных форм разных писем
Имею такую отправку на JS:
$(function() {

    $("input,textarea").jqBootstrapValidation({
        preventSubmit: true,
        submitError: function($form, event, errors) {
            // additional error messages or events
        },
        submitSuccess: function($form, event) {
            event.preventDefault(); // prevent default submit behaviour
            // get values from FORM
            var name = $('input[name="name"]').val();
            var email = $('input[name="email"]').val();
            var phone = $('input[name="phone"]').val(); 
			var coment = $('select[name="coment"]').val();
			var day = $('input[name="day"]').val();
            var message = $('textarea[name="message"]').val(); 
            var name2 = $('input[name="name2"]').val();
            var phone2 = $('input[name="phone2"]').val(); 
            var message2 = $('textarea[name="message2"]').val();
            var firstName = name; 
            if (firstName.indexOf(' ') >= 0) {
                firstName = name.split(' ').slice(0, -1).join(' ');
            } 
            $.ajax({  
                url: "././mail/contact_me.php", 
                type: "POST",
                data: {
                    name: name,
                    name2: name2,
					email: email,
                    phone: phone,
                    phone2: phone2,
                    coment: coment,
					day: day,
                    message: message, 
                    message2: message2
                },
                cache: false,
                success: function() {
                    // Success message
                    $('.success').html("<div class='alert alert-success'>");
                    $('.success > .alert-success').html("<button type='button' class='close' data-dismiss='alert' aria-hidden='true'>&times;")
                        .append("</button>");
                    $('.success > .alert-success')
                        .append("<strong>Ваше сообщение отправлено!</strong>");
                    $('.success > .alert-success')
                        .append('</div>'); 
					//$('#ModalSend').modal('hide');
                    //clear all fields
                    $('.contactForm').trigger("reset");
                }, 
                error: function() { 
                    // Fail message
                    $('.success').html("<div class='alert alert-danger'>");
                    $('.success > .alert-danger').html("<button type='button' class='close' data-dismiss='alert' aria-hidden='true'>&times;")
                        .append("</button>");
                    $('.success > .alert-danger').append("<strong>Sorry " + firstName + ", it seems that my mail server is not responding. Please try again later!");
                    $('.success > .alert-danger').append('</div>');
                    //clear all fields
                    $('.contactForm').trigger("reset");
                }, 
            })
			yaCounter30984571.reachGoal('record'); 
        }, 
        filter: function() {
            return $(this).is(":visible");
        },
    });

    $("a[data-toggle=\"tab\"]").click(function(e) {
        e.preventDefault();
        $(this).tab("show");
    });
});


/*When clicking on Full hide fail/success boxes */
$('input[name="name"]').focus(function() {
    $('.success').html('');
});


И отправку на PHP:
<?php   
$name = $_POST['name'];
$email = $_POST['email'];
$phone = $_POST['phone'];
$coment = $_POST['coment'];
$day = $_POST['day'];
$message = $_POST['message'];

$to = 'mechmedia@yandex.ru'; 
$email_subject = "Запрос с сайта:  $name";
$email_body = "Вы получили новое сообщение с сайта.\n\n"."Информация:\n\nИмя: $name\n\nEmail: $email\n\nТелефон: $phone\n\nУслуга: $coment\n\nДата: $day\n\nКомментарий:\n$message";
$headers = "From: info@prembeauty.com\n"; 
mail($to,$email_subject,$email_body,$headers);
$name2 = $_POST['name2'];
$phone2 = $_POST['phone2'];
$message2 = $_POST['message2']; 
  
$to = 'mechmedia@yandex.ru'; 
$email_subject2 = "Вакансия с сайта:  $name2";
$email_body2 = "Вы получили заявку на вакансию с сайта.\n\n"."Информация:\n\nИмя: $name2\n\nТелефон: $phone2\n\nКомментарий: $message2";
$headers = "From: info@prembeauty.com\n"; 
mail($to,$email_subject2,$email_body2,$headers);     
?>


Все работает, но при отправке из одной формы, на email приходят данные с двух форм. Где и как сделать проверку, чтобы приходили данные только с той формы, в которую вводили значения?
Ответить с цитированием
  #2 (permalink)  
Старый 24.03.2019, 22:20
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Это просто тихий ужас.
Могут две формы отправлены одновременно?
Ответить с цитированием
  #3 (permalink)  
Старый 24.03.2019, 22:26
Аспирант
Отправить личное сообщение для Timurkin Посмотреть профиль Найти все сообщения от Timurkin
 
Регистрация: 12.08.2017
Сообщений: 50

Сообщение от laimas Посмотреть сообщение
Это просто тихий ужас.
Могут две формы отправлены одновременно?
При отправке формы с сайта приходят два письма: с той формы, которая была заполнена, и со второй, где пустые значения.
Ответить с цитированием
  #4 (permalink)  
Старый 24.03.2019, 22:42
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от Timurkin
При отправке формы с сайта приходят два письма:
Ваш серверный код, это черная дыра позволяющая отправлять что угодно, сколько угодно и кому угодно. А еще и код на клиенте, это такой бардак, что слов нет описать его.
Ответить с цитированием
  #5 (permalink)  
Старый 24.03.2019, 22:46
Аспирант
Отправить личное сообщение для Timurkin Посмотреть профиль Найти все сообщения от Timurkin
 
Регистрация: 12.08.2017
Сообщений: 50

Сообщение от laimas Посмотреть сообщение
Ваш серверный код, это черная дыра позволяющая отправлять что угодно, сколько угодно и кому угодно. А еще и код на клиенте, это такой бардак, что слов нет описать его.
Согласен что криво сделано, понимаю, что нужно проверки делать, поэтому и тему создал.
Ответить с цитированием
  #6 (permalink)  
Старый 24.03.2019, 23:12
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Ну так исправляйте, ответ "как" кроется в вашем же вопросе, в коде, и в ответе "и со второй, где пустые значения". Серверу должны отправляться данные только той форму, которая отправляется в текущее время, а не со всех собрать все в кучу. НУ что это за бред такой.

Затем, я не знаю, что проверяет вот эта хрень jqBootstrapValidation, но она будет хренью до тех пор, пока вы не поймете, что ее назначение, это сервис на клиенте, а действительную и обязательную проверку данных должен производить сервер. Вы этого вообще не делаете. Да вас хостер изнасилует за такое отношение к порту 25, так как ваш код позволяет отправлять почту на кучу адресов.

Как и клиент должен отправлять данные только одной формы, так и сервер должен иметь код одного почтового отправления, а не кучи, в которых вы сознательно и мусор отправляете.

У вас же формы практически одинаковы, если требуется их различать для чего либо, добавьте скрытое поле, по которому и идентифицируйте их. Если этого не требуется, то данные формы, это массив, имена полей, это ключи, а значит за каждым ключом на сервере можно закрепить правило проверки данных этого ключа (поля формы), и сформировать почтовое отправление.

На клиенте вот начиная с этого
var name = $('input[name="name"]').val();
и кончая вот этим
if (firstName.indexOf(' ') >= 0) {
firstName = name.split(' ').slice(0, -1).join(' ');
}

выбросить, и если в методе плагина submitSuccess: function($form, event)
$form - это форма, ее поля и отправлять, вот тут как

data: $form.serialize(),

а

{
name: name,
name2: name2,
email: email,
phone: phone,
phone2: phone2,
coment: coment,
day: day,
message: message,
message2: message2
}

выбросить. Зачем вот эта магия firstName = name.split(' ').slice(0, -1).join(' ');, я ума не приложу, но если так хочется, то это можно и на сервере сделать.
Ответить с цитированием
  #7 (permalink)  
Старый 24.03.2019, 23:44
Аспирант
Отправить личное сообщение для Timurkin Посмотреть профиль Найти все сообщения от Timurkin
 
Регистрация: 12.08.2017
Сообщений: 50

Спасибо за наводку, разобрался!
Ответить с цитированием
  #8 (permalink)  
Старый 25.03.2019, 00:11
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Timurkin, это хорошо, но обязательно добавить проверку на сервере данных формы, и результат отправки почтового отправления (функция mail не отправляет почту, а передает отправление и ожидает результат) отправлять клиенту.
То есть сначала проверка данных формы, если есть ошибки, возвращаем их клиенту. Если нет, то отправка, и ее результат клиенту. На клиенте в success: function() выводить то, что у вас в коде только в случае если сервер не вернул ошибок заполнения формы и отправка почты произведена. В противном случае вывод ошибок или сообщение, что почта не отправлена.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отправка писем с формы обратной связи на вайбер или телеграмм Julia1991 Общие вопросы Javascript 0 17.07.2018 10:55
Отправка с помощью js данных 2 форм на email codehard Серверные языки и технологии 6 21.11.2016 14:38
Отправка данных из двух форм на один url Sanu0074 jQuery 1 04.08.2015 17:12
Отправка нескольких форм с помощью ajax voloxa89 jQuery 2 28.09.2011 22:08
Отправка писем со вложенными файлами marazmaticus Общие вопросы Javascript 1 29.06.2008 23:12