Теперь, когда вы получили представление о том, как организовать доступ к внешнему вводу из PHP-сценария, множество небольших вопросов могут возникать во время применения этих знаний на практике. Для начала рассмотрим элементы HTML, имена которых включают точку. В HTML предусмотрен отличный доступ к элементам формы по имени наподобие myvar. email (значение, установленное в дескрипторе NAME элемента). Однако учитывая ограничения, накладываемые на имена переменных, описанные в главе 1, такое имя в РНР является недопустимым. Как следствие, когда РНР выполняет отправку формы, которая содержит точку в одном или более именах элементов, они автоматически конвертируются в символы подчеркивания.
Таким образом, следующее значение элемента: <INPUT TYPE="text" NAME="myform.email"> доступно в РНР таким образом: echo $_GET['myform_email']; ?>
Хотя каждая форма может быть спроектирована таким образом, что ни одному элементу не присваивается имя со знаком подчеркивания, это поведение в РНР важно, когда вы имеете дело с элементами изображений, применяемыми для отправки формы. Если такой элемент имеет атрибут NAME, то после щелчка на нем он отправляется как часть данных с координатами X и Y точки, где пользователь выполнил щелчок. Точнее говоря, элемент изображения отправляет эти значения как переменные АААААА.х и АААААА.у, где АААААА представляет значение атрибута NAME. To есть для доступа к этим значениям в РНР точка должна быть заменена знаком подчеркивания:
Рассмотрим следующий элемент изображения для отправки формы: <INPUT TYPE="image" SRC="images/myimagemap.gif" NAME="mymap"> А вот как получить доступ к его координатам из РНР:
Координата Y: {$_GET['mymap_y']}"; ?>
При работе с элементами изображений в PHP-сценариях существует одна распространенная ошибка кодирования. В ситуациях, когда желательно иметь несколько элементов отправки формы, каждому из них должно быть присвоено значение атрибута NAME, дабы их можно было различать. Если используется несколько элементов изображений для отправки формы, часто для определения точного элемента отправки проверяются координаты X или Y следующим образом: if ($_GET[ 'myimagename_x' ]). К сожалению, это неправильный метод. Как известно, элемент изображения для отправки формы возвращает значения координат точки X, Y, в которой выполнен щелчок, PHP-сценарию. Проблема состоит в том, что представленный выше оператор i f не обеспечивает корректную проверку, если координата X принимает значение 0 (в текстовых браузерах при щелчке всегда возвращаются координаты 0, 0). Гораздо более правильный метод заключается в вызове функции i s s e t (), как показано в листинге 4.12. Листинг 4.12. Корректная проверка при отправке формы с использованием элементов изображений
Элементы изображений для отправки формы: <INPUT TYPE="image" NAME="submit_one" SRC="/images/buttonl.gif"> <INPUT TYPE="image" NAME="submit_two" SRC="/images/button2.gif">
Корректное определение в РНР того, на какой иэ кнопок отправки был произведен щелчок:
<?php if(isset($_GET['submit_one_x'])) ( /* Код, выполняемый при щелчке на первой кнопке отправки */ } elseif(isset($_GET[*submit_two_x'])) { /* Код, выполняемый при щелчке на второй кнопке отправки */ } else { /* Код, выполняемый, если отправки не было */
НА ЗАМЕТКУ Обратите внимание в листинге 4.12 на включенный третий случай (последнее предложение else). Если существуют только две кнопки отправки (как в данном примере), и обе они проверяются, будет ли когда-нибудь выполнен код за последним else? Да! В Microsoft Internet Explorer нажатие клавиши <Enter>, когда фокус находится на определенных элементах (таких как текстовое поле), вызывает отправку формы без использования какого-либо из элементов отправки.
|