Рефераты. Web-программирование. Обработка HTML-форм

<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=value1&name=value2&name=value3...

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

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

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

<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 ['month2'] типа «массив», содержимое которого следующее: 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>

Листинг hello2.php. Обработка списка с множественным выбором при включенной директиве register_globals

<?php

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

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

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

?>

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

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

Листинг hello2.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>”;

?>

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

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

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

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

<html>

Страницы: 1, 2, 3, 4, 5, 6, 7, 8



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.