Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.05.2018, 07:46   #1
Javany
Пользователь
 
Регистрация: 15.05.2018
Сообщений: 75
По умолчанию Отправка данных из клона формы методом GET и создание элементов.

Здравствуйте уважаемые разработчики. Подскажите как из клонированных форм забрать разные значения и вывести на экран столько дивов, сколько будет клонов. Есть код:

Код:
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>111</title>
</head>
<body>
	<style type="text/css">
	body{
			text-align: center;
			background-color: gray;
		} 
		
		h1{
			text-align: center;
		}

		select{
			margin:1vw;
			border: 1px solid red; 
		}

		input, button{
		margin-top:1vw;
		}

	</style>
<h1>Цветныe блоки</h1>
<form action ="result.php" method="GET">

<select id ="select"  name="color">
	<option value="red">красный</option>
	<option value="green">зеленый</option>
	<option value="blue">синий</option>
</select>

<br>

<input id="button" type="button" name="clone" value="добавить блок">

<br>

<input type="radio" name="location" checked="" value="float: left"> строка

<input type="radio" name="location" checked="" value=" "> столбец

<br>

<input type="submit" name="select" value="отправить запрос">

</form>

<script>
	var count =0;
	var but = document.getElementById('button');
	but.addEventListener('click',function(){
	var select = document.getElementById('select');
 	var clone = select.cloneNode(true);
	select.parentNode.insertBefore(clone, select.nextSibling);
	
	count+=1;
	console.log(count);
	})

</script>
</body>
</html>
В
Код:
<select id ="select"  name="color">
пользователь выбирает цвет, при клике на <input id="button" type="button" name="clone" value="добавить блок"> с помощью JS создаём клон <select id ="select" name="color">. При нажатии на
Код:
<input type="submit" name="select" value="отправить запрос">
передаем данные в result.php и там нужно вывести дивы. Нажали на <input id="button" type="button" name="clone" value="добавить блок"> 10 раз, клонировали select 10 раз, вывели 10 дивов, нажали 5, вывели 5. Сколько раз мы будем нажимать, неизвестно.

В result.php
Код:
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
<style type="text/css">
	div{
		border: 2px solid green; 
		width: 100px;
		height: 100px;
	}
</style>

	<?php 
function clean($value){
$value = trim($value);
$value = strip_tags($value);
$value = htmlspecialchars($value);
return $value;
}


$color = isset( $_GET['color']) ? clean($_GET['color']):null;
$location = isset( $_GET['location']) ? clean($_GET['location']):null;

echo '<div style = "background-color:'.$color.';'.$location.'"> </div>';
	 ?>

</body>
</html>
Данные в адресной строке прилетают, а вот как див создать, не понимаю.
Спасибо.
Не задавай вопрос, если не знаешь что делать с ответом...
Javany вне форума Ответить с цитированием
Старый 17.05.2018, 09:08   #2
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Текущий код позволяет получить только значение самого последнего списка – т.к. все эти списки имеют одинаковый id (что само по себе неправильно), а самое главное – все они имеют одинаковое имя name, поэтому в обработчик поступит значение только последнего из них.
Чтоб сделать множество списков – нужно в форме при клонировании создавать их массив:
Код:
<select name="colors[]">...</select>
<select name="colors[]">...</select>
<select name="colors[]">...</select>
Ну и в обработчике формы нужно будет работать с этим полем как с массивом, через цикл.
Тогда с созданием div-ов не будет никаких проблем.
Andkorol вне форума Ответить с цитированием
Старый 17.05.2018, 11:22   #3
Javany
Пользователь
 
Регистрация: 15.05.2018
Сообщений: 75
По умолчанию

Цитата:
Сообщение от Andkorol Посмотреть сообщение
Текущий код позволяет получить только значение самого последнего списка – т.к. все эти списки имеют одинаковый id (что само по себе неправильно), а самое главное – все они имеют одинаковое имя name, поэтому в обработчик поступит значение только последнего из них.
Чтоб сделать множество списков – нужно в форме при клонировании создавать их массив:
Код:
<select name="colors[]">...</select>
<select name="colors[]">...</select>
<select name="colors[]">...</select>
Ну и в обработчике формы нужно будет работать с этим полем как с массивом, через цикл.
Тогда с созданием div-ов не будет никаких проблем.
Спасибо, дивы вывести получилось. Подскажите пожалуйста, как из кода выкинуть лишнюю очистку? Раньше функцией
Код:
function clean($value){
$value = trim($value);
$value = strip_tags($value);
$value = htmlspecialchars($value);
return $value;
}
я очищал строки от лишнего, а теперь там не строка а массив.
Вот что у меня получилось:
Код:
	<?php 
function clean($value){
return $value;
}


$color = isset( $_GET['color']);
$location = isset( $_GET['location']);
$color = isset($_GET['color']) ?  array_map('clean', $_GET['color']): ['ничего не выбрано'];

foreach ($color as $index => $bgDiv){
echo '<div style = "background-color:'.$bgDiv.';'.$location.'"> </div>';	
}

 
	 ?>
Но функция теперь пустая, с смысла от неё ноль, но когда я её удаляю, всё ломается.
Не задавай вопрос, если не знаешь что делать с ответом...
Javany вне форума Ответить с цитированием
Старый 17.05.2018, 11:38   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Javany Посмотреть сообщение
Раньше функцией clean() я очищал строки от лишнего, а теперь там не строка а массив.
ну так в цикле по массиву пройдитесь и очищайте.
(вариантов цикла много - начиная с олдскульного for ..., продолжая методом forEach(), или метод map()
см. Массив: перебирающие методы
Serge_Bliznykov вне форума Ответить с цитированием
Старый 17.05.2018, 11:43   #5
Javany
Пользователь
 
Регистрация: 15.05.2018
Сообщений: 75
По умолчанию

Спасибо, разобрался.
Не задавай вопрос, если не знаешь что делать с ответом...
Javany вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обновление данных для клона компонента ClientDataSet bilibian Общие вопросы Delphi 16 20.09.2016 12:03
Отправка данных методом POST Arassir PHP 10 08.06.2012 01:49
Отправка данных методом post ANDEREY Работа с сетью в Delphi 4 11.08.2011 10:09
Отправка данных из формы Diruss HTML и CSS 14 17.06.2011 22:09
отправка формы методом GET ma000123 PHP 1 08.02.2010 15:06