Добрый день!
Есть форма с тремя полями select, и еще динамически добавляемыми такими же полями. Проблема заключается в том, что не удается передать значения из select'ов не только из динамических, но и из обычных. Также почему то выдается ошибка "Не заполнены поля", при этом поля заполнены и письма отправляются.
Помогите, пожалуйста, разобраться в чем ошибка, или что я делаю не так.
Код формы части формы с селектами (сама форма на всю стр идет):
<form id="calc-form" method="POST" action="javascript:void(null);" onsubmit="calc()" class="calc-form">
.....
<div class="calc-form-options flex">
<div class="select">
<p>Выберите опцию</p>
<select name="select[]" class="calc-form-input">
<option class="calc-form-option" value="Шлифзерно"><span>Шлифзерно</span></option>
<option class="calc-form-option" value="Шлифпорошки"><span>Шлифпорошки</span></option>
<option class="calc-form-option" value="Электрокорунд"><span>Электрокорунд</span></option>
</select>
</div>
<div class="select">
<p>Введите количество</p>
<input class="calc-form-input" name="select2[]" placeholder="Введите число">
</div>
<div class="select">
<p>Выберите опцию</p>
<select name="select3[]" class="calc-form-input">
<option class="calc-form-option" value="Шлифзерно"><span>Шлифзерно</span></option>
<option class="calc-form-option" value="Шлифпорошки"><span>Шлифпорошки</span></option>
<option class="calc-form-option" value="Электрокорунд"><span>Электрокорунд</span></option>
</select>
</div>
<button id="add_option" class="calc-form-add">Добавить еще одну опцию</button>
</div>
<div class="calc-form-options-add flex">
</div>
......
</form>
Код скрипта:
.......
function calc() {
var msg_3 = $('#calc-form').serialize();
$.ajax({
type: 'POST',
url: 'forma_calc.php',
data: msg_3,
success: function(data) {
if (data.result==1){
$('#form_thank_you').fadeIn(200);
$('.overlay').fadeIn(200);
$('#calc-form')[0].reset();
setTimeout(function(){$('#form_thank_you, .overlay').fadeOut('200')}, 2000);
}
else{
$('.overlay').fadeIn(200);
$('#form_error').fadeIn(200);
setTimeout(function(){$('#form_error, .overlay').fadeOut('200')}, 2000);
}
},
error: function(xhr, str){
$('.overlay').fadeIn(200);
$('#form_error_2').fadeIn(200);
setTimeout(function(){$('.overlay, #form_error_2').fadeOut('200')}, 2000);
}
});
};
$(document).ready(function(){
$('#add_option').click(function(event) {
addDynamicExtraField();
return false;
});
function addDynamicExtraField() {
var div_d = $('<div/>', {'class' : 'calc-form-options-add flex'
}).appendTo($('.calc-form-options-add.flex'));
var div = $('<div class="select"><p>Выберите опцию</p><select name="select[]" class="calc-form-input"><option class="calc-form-option" value="Шлифзерно"><span>Шлифзерно</span></option><option class="calc-form-option" value="Шлифпорошки"><span>Шлифпорошки</span></option><option class="calc-form-option" value="Электрокорунд"><span>Электрокорунд</span></option></select></div><div class="select"><p>Введите количество</p><input class="calc-form-input" name="select2[]" placeholder="Введите число"></div><div class="select"><p>Выберите опцию</p><select name="select3[]" class="calc-form-input"><option class="calc-form-option" value="Шлифзерно"><span>Шлифзерно</span></option><option class="calc-form-option" value="Шлифпорошки"><span>Шлифпорошки</span></option><option class="calc-form-option" value="Электрокорунд"><span>Электрокорунд</span></option></select></div>').appendTo(div_d);
$('<button class="delete_option calc-form-add">Удалить опцию</button>').appendTo(div_d);
$('.delete_option').click(function(event) {
$(this).parent().children().remove();
});
}
//Для удаления первого поля. если оно не динамическое
$('.delete_option').click(function(event) {
$(this).parent().remove();
return false;
});
});
Код обработчика:
<?php
$error = '';
if ($_POST) { // если передан массив POST
$select = var_dump($_POST["select"]); // пишем данные в переменные и экранируем спецсимволы
$select2 = var_dump($_POST["select2"]);
$select3 = var_dump($_POST["select3"]);
$dostavka = htmlspecialchars($_POST["dostavka"]);
$name_company = htmlspecialchars($_POST["name_company"]);
$name_face = htmlspecialchars($_POST["name_face"]);
$name_email = htmlspecialchars($_POST["name_email"]);
$name_phone = htmlspecialchars($_POST["name_phone"]);
$message = htmlspecialchars($_POST["message"]);
}
if ($select=='' or $select2=='' or $select3=='' or $name_company=='' or $name_face=='' or $name_email=='' or $name_phone=='' or $message=='' or $dostavka=='') { /* Проверка на пустые поля*/
$error='Заполните необходимые поля';
}
else {
$femail = 'noreply@mydomain.ru';
$address = 'elena.for.job.2015@yandex.ru'; /*Тут указіваем E-mail, куда будет отправляться письмо */
$sub="Отзыв с сайта";
$mes = "
Опции: $select, $select2, $select3
Доставка: $dostavka
Компания: $name_company
Представитель компании: $name_face
Контактный email: $name_email
Контактный телефон: $name_phone
Комментарий: $message";
$sub.=' mydomain';
$sub = "=?utf-8?B?" . base64_encode($sub) . "?=";
$verify = mail($address, $sub ,$mes, "Content-type:text/html; charset = utf-8\r\nFrom:$femail");
}
if ((strlen($error) == 0) && !$verify) {
$error = 'Заявка не отправлена';
}
if(strlen($error)>0){
$result = array('error' => $error);
} else {
$result = array('result' => 1);
}
header("Content-type: application/json; charset=UTF-8");
header("Cache-Control: must-revalidate");
header("Pragma: no-cache");
header("Expires: -1");
print json_encode($result);
?>
Ссылка на тестовый с сайтом.