В этом приложении приводятся сведения об обработке передаваемых данных.
Вплоть до версии РНР 4.2.0 при получении данных из HTML-формы не возникало никаких проблем. Например,
сделаем содержание файла test.php таким, как показано в примере:
<html> <head> <title>Передача данных</title> </head> <body> <?php echo $txt; ?> </body> </html>
Сейчас разберем, как передаются параметры, если переменная register_globals равна on. Создадим HTML-документ с формой, использующей несколько типов полей. Затем напишем сценарий, который будет обрабатывать переданные параметры. Код HTML-документа будет выглядеть следующим образом:
<html> <head> <title>Форма данных</title> </head> <body> <form action="form.php" method="GET"> Текстовое поле txt: <input type="text" name="txt"><br> Поле ввода пароля pswd: <input type="password" name="pswd"> <br><br> <input type="checkbox" name="var1" value="Вариант 1" checked> Вариант 1 (по умолчанию) <input type="checkbox" name="var2" value="Вариант 2"> Вариант 2 <br><br> Пол:<br> <input type="radio" name="pol" value="male" checked> Мужчина <input type="radio" name="pol" value="female"> Женщина <br><br> <textarea name="t_area" cols="20" rows="5" wrap="virtual"> Текст по умолчанию</textarea> <br><br> Список без возможности множественного выбора:<br> <select name="month" size="1"> <option value=01 selected>Январь</option> <option value=02>Февраль</option> <option value=03>Март</option> <option value=04>Апрель</option> <option value=05>Май</option> <option value=06>Июнь</option> <option value=07>Июль</option> <option value=08>Август</option> <option value=09>Сентябрь</option> <option value=10>Октябрь</option> <option value=11>Ноябрь</option> <option value=12>Декабрь</option> </select> <br> Список с возможностью множественного выбора:<br> <select name="month2[]" size="4" multiple="multiple"> <option value=01 selected>Январь</option> <option value=02>Февраль</option> <option value=03>Март</option> <option value=04>Апрель</option> <option value=05>Май</option> <option value=06>Июнь</option> <option value=07>Июль</option> <option value=08>Август</option> <option value=09>Сентябрь</option> <option value=10>Октябрь</option> <option value=11>Ноябрь</option> <option value=12>Декабрь</option> </select> <br><br> <input type="submit" name="go" value="Передать"> <input type="reset" value="Очистить"> </form> </body> </html>
В окне браузера форма будет выглядеть следующим образом (см. рис. 1):
Рис.1. Форма в окне браузера
Когда пользователь нажмет кнопку Передать, браузер передаст cценарию следующие параметры:
Теперь нам нужно разобраться, как обработать все эти параметры. Параметры txt, pswd и t_area обрабатываются легко. Для каждого параметра создается переменная с соответствующим именем. То есть для параметра txt создается переменная $txt, для параметра pswd - $pswd и для t_area - $t_area. Например, для отображения значения параметра txt достаточно написать:
echo "$txt";
С параметрами var1 и var2 дело обстоит несколько сложнее. Если переключатели неактивны, то параметры вообще не будут переданы на сервер, как будто бы вообще их не было. Следовательно, не будет создана глобальная переменная и при попытке обращения к такой переменной, мы получим сообщение о том, что переменная не существует. Поэтому просто написать echo val1; мы не можем: нужно предварительно проверить существует ли переменная:
if (isset($var1)) echo "var1: $var1"; if (isset($var2)) echo "var2: $var2";
Только после проверки существования можно начинать работу с переменной.
Параметр pol, то есть наш зависимый переключатель, обрабатывается легко - браузер передает только одно из значений. Другими словами, параметр pol будет равен male или female. Поэтому можно просто вывести значение этого параметра:
echo pol;.
Точно также обрабатывается параметр month - это обыкновенный список без возможности множественного выбора, поэтому по сути его можно представить как набор из 12 зависимых переключателей.
Сложнее всего обработать список с множественным выбором. Ведь в этом случае параметры передаются так:
name=value1&name=value2&name=value3&...
Если мы просто выведем переменную $name, то она будет содержать только последнее значение (valueN). Однако разработчики РНР позаботились об этом: множественный список можно представить в виде массива, а обработать его элементы можно с помощью цикла foreach. Нам даже не нужно знать количество переданных элементов списка. Предварительно лишь нужно сообщить РНР, что мы будем передавать массив:
<select name="month2[]" size=4 multiple>
Квадратные скобки - это признак массива. Обрабатывается массив так:
foreach ($month2 as $key=>$value) { echo "$key=$value <br>"; }
Окончательный вид файла form.php будет выглядеть следующим образом:
<html> <head> <title>Обработка данных</title> </head> <body> <?php /* Проверяем, нажал ли пользователь кнопку "Поехали" (go)*/ if (!isset($go)) { echo "Не указаны параметры \n"; exit(1); } else { // Начинаем обработку параметров echo "<b>Текстовые поля</b><br>"; echo "txt: $txt"."<br>"; echo "pswd: $pswd"."<br><br>"; echo "<b>Checkbox</b><br>"; if (isset($var1)) echo "var1: $var1"; if (isset($var2)) echo "var2: $var2"; echo "<br><br>"; echo "<b>Radio</b><br>"; echo "pol: $pol"; echo "<br><br>"; echo "<b>Область ввода текста</b><br>"; echo "$t_area"; echo "<br><br>"; echo "<b>Список month: </b><br>"; echo "$month"; echo "<br><br>"; echo "<b>Список month2: </b><br>"; foreach ($month2 as $key=>$value) { echo "$key=$value <br>"; } } ?> </body> </html>
Предположим, что в текстовое поле txt мы ввели имя Денис, в поле пароля - мой_пароль, выбрали только вариант 2, установили параметр pol в значение male, заполнили текстовую область, в первом списке выбрали Январь, а во втором - первые три месяца. В результате мы получим такой вывод сценария (см. рис. 2):
Рис.2. Результат работы сценария
Вывод сценария в особых комментариях не нуждается, кроме списков (month и month2). Как вы видите, в списке month передается не строка (Январь), а заданное значение value (01). В списке с множественным выбором выводится номер элемента (0, 1, 2) и значения элементов массива (01, 02, 03).