
24.03.2019, 20:12
|
Аспирант
|
|
Регистрация: 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'>×")
.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'>×")
.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 приходят данные с двух форм. Где и как сделать проверку, чтобы приходили данные только с той формы, в которую вводили значения?
|
|

24.03.2019, 22:20
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Это просто тихий ужас.
Могут две формы отправлены одновременно?
|
|

24.03.2019, 22:26
|
Аспирант
|
|
Регистрация: 12.08.2017
Сообщений: 50
|
|
Сообщение от laimas
|
Это просто тихий ужас.
Могут две формы отправлены одновременно?
|
При отправке формы с сайта приходят два письма: с той формы, которая была заполнена, и со второй, где пустые значения.
|
|

24.03.2019, 22:42
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от Timurkin
|
При отправке формы с сайта приходят два письма:
|
Ваш серверный код, это черная дыра позволяющая отправлять что угодно, сколько угодно и кому угодно. А еще и код на клиенте, это такой бардак, что слов нет описать его.
|
|

24.03.2019, 22:46
|
Аспирант
|
|
Регистрация: 12.08.2017
Сообщений: 50
|
|
Сообщение от laimas
|
Ваш серверный код, это черная дыра позволяющая отправлять что угодно, сколько угодно и кому угодно. А еще и код на клиенте, это такой бардак, что слов нет описать его.
|
Согласен что криво сделано, понимаю, что нужно проверки делать, поэтому и тему создал.
|
|

24.03.2019, 23:12
|
Профессор
|
|
Регистрация: 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(' ');, я ума не приложу, но если так хочется, то это можно и на сервере сделать.
|
|

24.03.2019, 23:44
|
Аспирант
|
|
Регистрация: 12.08.2017
Сообщений: 50
|
|
Спасибо за наводку, разобрался!
|
|

25.03.2019, 00:11
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Timurkin, это хорошо, но обязательно добавить проверку на сервере данных формы, и результат отправки почтового отправления (функция mail не отправляет почту, а передает отправление и ожидает результат) отправлять клиенту.
То есть сначала проверка данных формы, если есть ошибки, возвращаем их клиенту. Если нет, то отправка, и ее результат клиенту. На клиенте в success: function() выводить то, что у вас в коде только в случае если сервер не вернул ошибок заполнения формы и отправка почты произведена. В противном случае вывод ошибок или сообщение, что почта не отправлена.
|
|
|
|