Обработка списков с множественным выбором
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

 

В списках множественного выбора можно выбрать не одно, а сразу несколько значений. Чтобы сделать список с множественным выбором, необходимо для тега SELECT указать атрибут multiple:

<select name=month2 multiple>

<option value=01>Январь</option>

<option value=02>Февраль</option>

<option value=03>Mapт</option>

<option value=04>Апрель</option>

<option value=05>Maй</option>

<option value=06>Июнь</option>

<option value=07>Июль</option>

<option value=08>Август</option>

<option value=09>Ceнтябрь</option>

<option value=10>Oктябрь</option>

<option value=11>Hоябрь</option>

<option value=12>Декабрь</option>

</select>

После отправки формы параметры передаются так: name = value 1& name = value 2& name = value 3...

Переменная $name = month 2 будет содержать только последнее значение (value N).

Пусть выбрали Ma й и Август. Тогда после отправки формы сценарию придет строка параметров month 2 = Ma й& month 2 = Август, и в переменной $_REQUEST [' month 2'] окажется, конечно, только Август.

Первый пункт (Ma й) потерялся. Для решения подобных проблем в РНР предусмотрена возможность давать имена полям формы в виде «массива с индексами» month 2[](квадратные скобки - это признак массива.):

<select name=”month2[]”multiple>

<option value=01>Январь</option>

<option value=02>Февраль</option>

<option value=03>Mapт</option>

<option value=04>Апрель</option>

<option value=05>Maй</option>

<option value=06>Июнь</option>

<option value=07>Июль</option>

<option value=08>Август</option>

<option value=09>Ceнтябрь</option>

<option value=10>Oктябрь</option>

<option value=11>Hоябрь</option>

<option value=12>Декабрь</option>

</select>

Теперь сценарию придет строка month2[]= Maй&month2[]= Август.

Интерпретатор обнаружит, что мы хотим создать «автомассив», т. е. массив, который не содержит пропусков и у которого индексация начинается с нуля. Интерпретатор создаст запись $_REQUEST [' month 2'] типа «массив», содержимое которого следующее: array (0=>» Ma й «, l=>» Август «). Как мы видим, в результате ничего не пропало — данные только слегка видоизменились.

В результате мы получим в $_REQUEST массив массивов (или двумерный массив, как его еще называют).

Таким образом, множественный список преобразован в массив. Массив представляет собой индексированную совокупность переменных одного типа. Каждая переменная или элемент массива имеет свой индекс, т.е. все элементы массива последовательно пронумерованы.

Обход массива в цикле организуют (обрабатывают его элементы) с помощью цикла foreach. Принцип работы этого цикла прост: при проходе каждого элемента массива в переменную $ key помещается индекс этого элемента, а в переменную $ value – его значение.

Нам даже не нужно знать количество переданных элементов списка. Предварительно лишь нужно сообщить РНР, что мы будем передавать массив:

<select name”month2[]”size=4 multiple>

Напомним, что квадратные скобки — это признак массива.

Обрабатывается массив так:

foreach($month2 as $key=>$value)

echo “$key = $value <br>”;

Листинг month2.html. Форма списка с множественным выбором

<html>

<head>

<title>Обработка списка с множественным выбором</title>

</head>

<body>

<form action=hello2.php>

<select name=”month2[]” size=4 multiple>

<option value=01> Январь </option>

<option value=02> Февраль </option>

<option value=03>Map т </option>

<option value=04> Апрель </option>

<option value=05>Ma й </option>

<option value=06> Июнь </option>

<option value=07> Июль </option>

<option value=08> Август </option>

<option value=09>Ce нтябрь </option>

<option value=10>O ктябрь </option>

<option value=11>H оябрь </option>

<option value=12> Декабрь </option>

</select><br>

<input type=submit v а 1ue = “ Нажмите кнопку , чтобы запустить сценарий ! «>

</form>

</body>

</html>

Листинг hello 2. php . Обработка списка с множественным выбором при включенной директиве register _ globals

<?php

echo “<b г ><b> Список month2: </b><br>” ;

foreach ($month2 as $key=>$value)

echo “$key = $value <br>”;

?>

В окне браузера форма выглядит следующим образом:

 

 


 

Природа этой ошибки подробно будет рассмотрена в п. 3: «Какой режим выбрать: register _ globals = off & on ?». Здесь заметим лишь, что мы обратились к переменной $ month 2 как к глобальной, что требует наличия включенной директивы register _ globals = on . Если эта директива отключена (register _ globals = off), что настоятельно рекомендуется делать, то нужное значение можно получить через глобальный массив $_ REQUEST [' month 2']. Поэтому сделаем необходимые исправления.

Листинг hello 2. php . Обработка списка с множественным выбором при отключенной директиве register _ globals

<?php

echo “<bг><b>Список month2: </b><br>” ;

foreach ($_REQUEST[’month2’] as $key=>$value)

echo “$key = $value <br>”;

?>

 

 

Прием с автомассивом в поле <seiect multiple> для списка с множественным выбором выглядит довольно элегантно. Однако не стоит думать, что он применим только к этому элементу формы: автомассивы можно применять и в любых других полях. Вот пример, создающий два переключателя (кнопки со значениями вкл/выкл), один элемент ввода строки и одно текстовое (многострочное) поле, причем все данные после запуска сценария, обрабатывающего эту форму, будут представлены в виде одного-единственного автомассива:

Листинг txt.html. Применение автомассивов

<html>

<head>

<title>Применение автомассивов</title>

</head>

<body>

<form action=hello3.php>

<input type=checkbox name=Arr[] value=chl>

<input type=checkbox name=Arr[] value=ch2>

<input type=text name=Arr[] value=” Однострочный текст ”>

<textarea name=Arr[]> Многострочный текст </textarea>

<input type=submit v а 1ue = “ Нажмите кнопку , чтобы запустить сценарий ! «>

</form>

</body>

</html>

В окне браузера форма выглядит следующим образом:

 

 


Листинг hello3.php. Сценарий обработки автомассивов

<?php

echo “<b г ><b> Список month3: </b><br>” ;

foreach ($_REQUEST[’Arr’] as $key=>$value)

echo “$key = $value <br>”;

?>

 

Видно, что РНР совершенно нет никакого дела до того, в каких элементах формы мы используем автомассивы — он в любом случае обрабатывает все одинаково. И это, пожалуй, не только правильно, но и удобно.

 

Обработка массивов

 

Рассмотрены почти все возможности РНР по автоматической трансляции данных формы. Напоследок взглянем на еще одно полезное свойство РНР. Пусть имеется такая форма:

Листинг txt1.html. Форма для примера «Обработка массивов»

<html>

<head>

<title> Обработка массивов </title>

</head>

<body>

<form action=hello4.php>

Имя : <input type=text name=Data[name]><br>

Адрес : <input type=text name=Data[address]><br>

Город : <br>

<input type=radio name=Data[city] value=Newomoscow> Новом oc ковск <br>

<input type=radio name=Data[city] value=Kiev>K иев <br>

<input type=submit v а 1ue = “ Нажмите кнопку , чтобы запустить сценарий ! «>

</form>

</body>

</html>

В окне браузера форма выглядит следующим образом:

 

 

После передачи подобных данных сценарию на РНР в нем будет инициализирован ассоциативный массив $Data с ключами name, address и city. То есть, имена полям формы можно давать не только простые, но и представленные в виде одномерных ассоциативных массивов.

В сценарии к отдельным элементам формы можно обратиться при помощи указания ключа массива: например, $_REQUEST ['Data'] ['city'] обозначает значение той радиокнопки, которая была выбрана пользователем, а $_REQUEST ['Data'] ['name'] — введенное имя.

Предупреждение. В сценарии обязательно нужно заключать ключи в кавычки или апострофы. В противном случае интерпретатором будет выведено предупреждение. В то же время, в параметрах name полей формы, наоборот, нужно их избегать — так устроен РНР.

Напишем сценарий.

Листинг hello4.php. Сценарий для обработки массива

<?php

echo “<b г ><b> Список month4 </b><br>” ;

foreach ($_REQUEST[’Data’] as $key=>$value)

echo “$key = $value <br>”;

?>

 

 

Дата: 2019-04-23, просмотров: 205.