Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Вытянуть название из select (https://javascript.ru/forum/misc/70704-vytyanut-nazvanie-iz-select.html)

Dan922 27.09.2017 02:32

Вытянуть название из select
 
Привет люди!
Столкнулся с проблемой.
Написал форму с зависимыми списками. Страна, регион, город.
Все подтягивается из БД.

Вопрос:
Как это все дело зафиксировать и отправить на почту?

Так же написал скрипт PHP , но на почту вместо названий стран и городов приходят id значения из value. А надо, чтобы на почту приходили названия.

<form class="messages"  id="ajaxform" action="sendmail.php" method="post" >
						<input type="text" class="email" id="user_name" name="name" placeholder="Ваше имя" required="" value="" >
						<input type="email" class="password" id="user_email" name="email" placeholder="Ваша электронная почта" required="" value="">
						<select name="country_id" id="country_id" class="form-control option-alsols" value="">
				<option value="0">- Страна отправления -</option>
				<option value="3159">Россия</option>
				<option value="9908">Украина</option>
				<option value="248">Беларусь</option>
				<option value="245">Армения</option>
				<option value="81">Азербайджан</option>
				<option value="9638">Туркменистан</option>
                <option value="9787">Узбекистан</option>


				<option value="2303">Киргызстан</option>
				<option value="1894">Казахстан</option>
				<option value="2788">Молдова</option>
				<option value="9575">Такжикистан</option>

							</select>
							<select name="region_id" id="region_id" disabled="disabled" class="form-control option-alsols" value="";>
				<option value="0">- Регион отправления -</input>
			</select>
							<select name="city_id" id="city_id" disabled="disabled" class="form-control option-alsols"  value="";>
					<option value="0">- Город отправления -</input>
			</select>
							
						<select name="strana" id="strana" class="form-control option-alsols" value="";>
				<option value="0">- Страна доставки -</option>
				<option value="3159">Россия</option>
				<option value="9908">Украина</option>
				<option value="248">Беларусь</option>
				<option value="245">Армения</option>
				<option value="81">Азербайджан</option>
				<option value="9638">Туркменистан</option>
				<option value="9787">Узбекистан</option>


				<option value="2303">Киргызстан</option>
				<option value="1894">Казахстан</option>
				<option value="2788">Молдова</option>
				<option value="9575">Такжикистан</option>

							</select>
							<select name="regio" id="regio" disabled="disabled" class="form-control option-alsols" value="";>
				<option value="0">- Регион доставки -</option>
			</select>
							<select name="city" id="city" disabled="disabled" class="form-control option-alsols" value="0">
				<option value="0">- Город доставки -</option>
			</select>
			
						<select  name="tip" id="tip" class="form-control option-alsols" value="">
								<option>Тип груза</option>
								<option>EUR-паллет</option>
								<option>FIN-паллет</option>
								<option>US-паллет</option>
							</select>
					

						<input type="submit"  id="submit" class="hvr-shutter-in-vertical" value="Отправить">  	
					</form>


Обработчик PHP формирование и отправка письма:

<?php
if (isset($_POST['name'])) {$name = $_POST['name']; if ($name == '') {unset($name);}}
if (isset($_POST['email'])) {$email = $_POST['email']; if ($email == '') {unset($email);}}
if (isset($_POST['country_id'])) {$country_id = $_POST['country_id']; if ($country_id == '') {unset($country_id);}}
if (isset($_POST['region_id'])) {$region_id = $_POST['region_id']; if ($region_id == '') {unset($region_id);}}
if (isset($_POST['city_id'])) {$city_id = $_POST['city_id']; if ($city_id == '') {unset($city_id);}}
if (isset($_POST['strana'])) {$strana = $_POST['strana']; if ($strana == '') {unset($strana);}}
if (isset($_POST['regio'])) {$regio = $_POST['regio']; if ($regio == '') {unset($regio);}}
if (isset($_POST['city'])) {$city = $_POST['city']; if ($city == '') {unset($city);}}
if (isset($_POST['tip'])) {$tip = $_POST['tip']; if ($tip == '') {unset($tip);}}
 
if (isset($name) && isset($email) && isset($country_id) && isset($region_id) && isset($city_id) && isset($strana) && isset($city) && isset($regio) && isset($tip)){
 
$address = "*****@gmail.com";
$mes = "Имя: $name \nE-mail: $email \nИз страны: $country_id \nИз региона: $region_id \nИз города: $city_id \nВ страну: $strana \nВ регион: $regio \nВ город: $city \nТип груза: $tip";
$send = mail ($address,$country_id,$mes,"Content-type:text/plain; charset = UTF-8\r\nFrom:$email");
if ($send == 'true')
{echo "Сообщение отправлено . Вы будете направлены на главную страницу блога <a href=''></a>,где сможете продолжить ваш просмотр";}
else {echo "Ошибка, сообщение не отправлено!";}
 
}
else
{
echo "Вы заполнили не все поля, вернитесь назад и заполните необходимые поля!";
}
?>



И собственно сама выпадашка на js:

$(document).ready(function () {
	$('#country_id').change(function () {
		var country_id = $(this).val();
		if (country_id == '0') {
			$('#region_id').html('<option>- Регион отправления -</option>');
			$('#region_id').attr('disabled', true);
			$('#city_id').html('<option>- Город отправления-</option>');
			$('#city_id').attr('disabled', true);
			return(false);
		}
		$('#region_id').attr('disabled', true);
		$('#region_id').html('<option>загрузка...</option>');
		
		var url = 'get_regions.php';
		
		$.get(
			url,
			"country_id=" + country_id,
			function (result) {
				if (result.type == 'error') {
					alert('error');
					return(false);
				}
				else {
					var options = ''; 
					
					$(result.regions).each(function() {
						options += '<option value="' + $(this).attr('region_id') + '">' + $(this).attr('name') + '</option>';
					});
					
					$('#region_id').html('<option value="0">- Регион отправления -</option>'+options);
					$('#region_id').attr('disabled', false);
					$('#city_id').html('<option>- Город отправления -</option>');
					$('#city_id').attr('disabled', true);  	
							
				}
			},
			"json"
		);
	});

$('#region_id').change(function () {
		var region_id = $(this).val(); //$('#region_id :selected').val();
		//alert (region_id);
		if (region_id == '0') {
			$('#city_id').html('<option>- Город отправления -</option>');
			$('#city_id').attr('disabled', true);
			return(false);
		}
		$('#city_id').attr('disabled', true);
		$('#city_id').html('<option>загрузка...</option>');
		
		var url = 'get_city.php';
		
		$.get(
			url,
			"region_id=" + region_id,
			
			function (result) {
				if (result.type == 'error') {
					alert('error');
					return(false);
				}
				else {
					var options = ''; 
					$(result.citys).each(function() {
						options += '<option value="' + $(this).attr('city_id') + '">' + $(this).attr('name') + '</option>'; 
						
					});
					$('#city_id').html('<option value="0">- Город отправления -</option>'+options);		
					$('#city_id').attr('disabled', false);
					
$('#city_id').change(function(){
	var value = $('#city_id :selected').text();
	var city_id = $('#city_id :selected').val(); 
	if (city_id !== '0') {
	$('#selectBoxInfo').html('Выбран '+ value).
	fadeIn(1000,function(){
	$(this);
    });	
 } 
});					
	}
			},
			"json" 
		);
	});	
});

$(document).ready(function () {
$('#strana').change(function () {
		var country_id = $(this).val();
		if (country_id == '0') {
			$('#regio').html('<option>- Регион доставки -</option>');
			$('#regio').attr('disabled', true);
			$('#city').html('<option>- Город доставки-</option>');
			$('#city').attr('disabled', true);
			return(false);
		}
		$('#regio').attr('disabled', true);
		$('#regio').html('<option>загрузка...</option>');
		
		var url = 'regio.php';
		
		$.get(
			url,
			"country_id=" + country_id,
			function (result) {
				if (result.type == 'error') {
					alert('error');
					return(false);
				}
				else {
					var options = ''; 
					
					$(result.regions).each(function() {
						options += '<option value="' + $(this).attr('region_id') + '">' + $(this).attr('name') + '</option>';
					});
					
					$('#regio').html('<option value="0">- Регион доставки -</option>'+options);
					$('#regio').attr('disabled', false);
					$('#city').html('<option>- Город доставки -</option>');
					$('#city').attr('disabled', true);  	
							
			}
			},
			"json"
		);
	});
				
		
		$('#regio').change(function () {
		var region_id = $(this).val(); //$('#region_id :selected').val();
		//alert (region_id);
		if (region_id == '0') {
			$('#city').html('<option>- Город доставки -</option>');
			$('#city').attr('disabled', true);
			return(false);
		}
		$('#city').attr('disabled', true);
		$('#city').html('<option>загрузка...</option>');
		
		var url = 'city.php';
		
		$.get(
			url,
			"region_id=" + region_id,
			
			function (result) {
				if (result.type == 'error') {
					alert('error');
					return(false);
				}
				else {
					var options = ''; 
					$(result.citys).each(function() {
						options += '<option value="' + $(this).attr('city_id') + '">' + $(this).attr('name') + '</option>'; 
						
					});
					$('#city').html('<option value="0">- Город доставки -</option>'+options);		
					$('#city').attr('disabled', false);
					
$('#city').change(function(){
	var value = $('#city :selected').text();
	var city_id = $('#city :selected').val(); 
	if (city_id !== '0') {
	$('#selectBoxInfo').html('Выбран '+ value).
	fadeIn(1000,function(){
	$(this);
  });	
 } 
});					
	}
			},
			"json" 
		);
	});	
});



Задача не из легких. И информации мало с примерами.

laimas 27.09.2017 06:06

Цитата:

Сообщение от Dan922
Все подтягивается из БД.

Откуда тогда может возникать вопрос

Цитата:

Сообщение от Dan922
но на почту вместо названий стран и городов приходят id значения из value

если value списков, это идентификаторы городов, что и должен получать сервер, и под этими идентификаторами в базе содержится вся другая информация о городах?

if (isset($name) && isset($email) .... else "Вы заполнили не все поля ...

Это глупость, ибо так if (isset($_POST['name'])) {$name = $_POST['name']; if ($name == '') {unset($name);}} ... а тем более при асинхронном обмене не поступают.

И функция mail не может сказать отправлена ли почта, получил ли ее адресат. Эта функция все лишь отдает почтовое отправление sendmail, который и занимается почтой. Функция mail возвращает удача/нет лишь факт того, что sendmail принял или есть ошибка.

Dan922 27.09.2017 12:05

value-это идентификаторы, их убирать нельзя иначе не будет работать зависимый список.
Данные подтягиваются из отдельной таблицы "city". Через запросы , что-то вроде
<?php
include_once 'connect.php';
$region_id = @intval($_GET['region_id']);
//$region_id = 4312;

$regs=mysql_query("SELECT name, city_id FROM city WHERE region_id=$region_id"); 

if ($regs) {
    $num = mysql_num_rows($regs);      
    $i = 0;
    while ($i < $num) {
       $citys[$i] = mysql_fetch_assoc($regs);   
       $i++;
    }     
    $result = array('citys'=>$citys);  
}
else {
	$result = array('type'=>'error');
}
/**
 * if ($regs) {
 * $num = mysql_num_rows($regs); 
 * $citys = array();

 * for ($i=0; $i<$num; $i++) 
 * $city[$i] = mysql_fetch_row($regs);

 * $i=0;
 * 	foreach ($city as $r) {
 * 		$citys[] = array('id'=>$i, 'title'=>$r);
 * 		$i++;
 * 	} 
 * $result = array('type'=>'success', 'citys'=>$citys);  
 * }
 * else {
 * 	$result = array('type'=>'error');
 * }
 */
//echo "<pre>";
//print_r ($result);
//echo "</pre>";
print json_encode($result); 
//print var_dump($result)
?>

Dan922 27.09.2017 12:23

Так ведь работает же?!

Dan922 27.09.2017 12:31

если value списков, это идентификаторы городов, что и должен получать сервер, и под этими идентификаторами в базе содержится вся другая информация о городах?


Да.
Но надо получить именно название городов, как это можно сделать?

Dilettante_Pro 27.09.2017 12:45

Dan922,
Для Из города, например
на сервере
SELECT name FROM city WHERE city_id = $city_id
где $city_id - индекс города, полученный из селекта

laimas 27.09.2017 12:58

Цитата:

Сообщение от Dan922
Данные подтягиваются из отдельной таблицы "city". Через запросы , что-то вроде

Это вы так получаете данные для списка на клиенте (обслуживание асинхронных запросов клиента). Только сабака здесь @intval($_GET['region_id']) зверь лишний и никчемный.

Это же самое нужно получать по приему формы. Зная, что списки возвращают идентификаторы городов и т.д., получить по ним названия в БД. Проверка же не заполненных полей, это:

$post = array_map('trim', $_POST);
if($empty = array_intersect($post, [''])) {
     //массив $empty содержит поля формы, которые не заполнены
     //возвращаем клиенту сообщение об ошибках заполнения в них
} else {
    //иначе проверка на корректность заполнения полей
    //имя какое разрешено, корректно ли введен email
    //остальные поля должны быть цифры - привести их к intereg
    //если же есть ошибки ввода, то возвращаем сообщения клиенту
    //если все Ок, то запрашиваем по идентификатору города его название в базе
    $city = mysql_query("SELECT name FROM city WHERE city_id=" . $post['city_id']);
    //таким же образом и названия для другого получить не проблема
    //формируем и отправляем почту   
}

Dan922 27.09.2017 14:28

Цитата:

Сообщение от laimas (Сообщение 465593)
Откуда тогда может возникать вопрос



если value списков, это идентификаторы городов, что и должен получать сервер, и под этими идентификаторами в базе содержится вся другая информация о городах?

if (isset($name) && isset($email) .... else "Вы заполнили не все поля ...

Это глупость, ибо так if (isset($_POST['name'])) {$name = $_POST['name']; if ($name == '') {unset($name);}} ... а тем более при асинхронном обмене не поступают.

И функция mail не может сказать отправлена ли почта, получил ли ее адресат. Эта функция все лишь отдает почтовое отправление sendmail, который и занимается почтой. Функция mail возвращает удача/нет лишь факт того, что sendmail принял или есть ошибка.


А существует ли возможность более простого построения зависимого списка с отправкой на почту?
...уже мозг сломал :(

laimas 27.09.2017 14:48

Цитата:

Сообщение от Dan922
А существует ли возможность более простого построения зависимого списка

Если речь о сервере, то это единственный запрос (или с вложенными) в котором изменяется только параметр, проще уже некуда.

Если на клиенте, то да. Клиентский код что у вас, это слишком громоздко и не оправдано. Для построения зависимых списков и на клиенте нужен всего лишь один обработчик запросов для всех списков, так как и на клиенте он будет делать одно и тоже - запрашивать сервер, получать ответ, строить по ответу списки. Разница только в том, что список может быть 2, 3, 4,... в наборе связанных списков (первый список обычно уже заполнен и отдается клиенту сразу при запросе страницы, и он не изменяется).

Не охота повторятся еще раз, об этом уже писалось, поищите на форуме, темы такие были и не раз.

Почта же конкретно к спискам зависимым, или к чему либо еще не привязана, это просто почта, она может отправлять сообщения не обязательно данными из формы, ее можно просто и не отправлять.

Dan922 27.09.2017 16:04

Перерыл все.

С подобным вопросом не обращался.
В основном все начинается и заканчивается на обсуждении построения самих списков.
А вот как дальше быть, как достать из них названия и отправить на почту-нет ничего :(


Часовой пояс GMT +3, время: 07:25.