HelenStar
@HelenStar
Начинающий frontend

Как передать значения из select в форме?

Добрый день!
Есть форма с тремя полями 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);
?>


Ссылка на тестовый с сайтом.
  • Вопрос задан
  • 5910 просмотров
Пригласить эксперта
Ответы на вопрос 2
Stalker_RED
@Stalker_RED
Все отлично сериализируется.
https://jsfiddle.net/dak4okwu/

Проверьте уходят ли данные при запросе.

UPD:
$select = var_dump($_POST["select"]); // пишем данные в переменные и экранируем спецсимволы
  $select2 = var_dump($_POST["select2"]);
  $select3 = var_dump($_POST["select3"]);

WTF? Что, по вашему, эти строчки делают?
1. У вас нет полей с именами "select", "select2", "select3"
2. var_dump ничего не возвращает.

Бесплатный совет из интернета: включите отображение ошибок, или просматривайте error.log
Ответ написан
@kostya_dev
1. Почему не передается значение из select.

<select name="select[]" class="calc-form-input"> - html-код
$select = var_dump($_POST["select"]); - php-код
Найдите отличие.

2. Также почему то выдается ошибка "Не заполнены поля", при этом поля заполнены и письма отправляются.

При проверке if(data.result==1) вы получаете результат false, так как
data.resultundefined
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы