Выше мы заполняли форму с небольшим числом полей и переходили на страницу, где отображалось введенное значение. Известно, что значение формы было направлено в файл test_form_processor.php в теле запроса. Существуют и другие способы перемещения данных между страницами, например, (1) в составе URL-адресов, (2) файлов cookie и (3) переменных сеансов связи и приложений.
Возникает логичный вопрос о том, для чего существует так много способов, и как понять, какой из них использовать в той или иной ситуации? Дело в том, что каждый способ имеет свои возможности и ограничения.
Например, в переменной формы отправленной в теле запроса, данные перемещались со страницы ввода на страницу, которая их обрабатывала и отображала. Такой подход ограничен тем, что после завершения обмена данными сервер забывает и переменную firstName, и ее значение. Если пользователь перейдет на другую страницу, сервер не сможет повторно выдать значение переменной firstName, а, следовательно, оно не сможет использоваться в коде страницы. При создании многостраничной формы с бланком заказа в интернет-магазине ограничения в использовании переменных формы становятся особенно заметны.
Сегодня данные переместим из формы на страницу test_form_processor.php другим способом – при помощи строки запроса. Строка запроса – это список переменных, который добавляется в конец URL-адреса. В сети часто встречаются длинные адреса, которые по виду содержат больше информации, чем просто адрес страницы. Эта информация и является строкой запроса.
175. Откройте файл test_form.php. Форма имеет малое число полей для ввода данных.
176. Поместите курсор справа от текстового поля и нажмите Enter. Введите Фамилия и добавьте второе текстовое поле — Insert, Form, Text Field. На панели Property Inspector присвойте новому полю имя lastName. Поместите курсор справа от текстового поля lastName и снова нажмите Enter, чтобы переместить кнопку для регистрации Submit в следующую строку.
177. В селекторе тегов щелкните на теге <form#frm_name>, чтобы выделить всю форму и открыть на панели инспектора свойств соответствующие настройки. Чтобы изменить параметры какого-либо элемента, рекомендуется выделить его в селекторе тегов (особенно, если в элемент вложено несколько других, как, например, в теге <form>).
178. В поле со списком Method на панели Property Inspector выберите пункт GET. При использовании метода POST данные пересылаются в теле запроса. Но при употреблении метода GET данные пересылаются в составе строки запроса, а, значит, переменные firstName, lastName и их значения, прикрепленные к URL-адресу, становятся видимыми.
179. На вкладке Code должно так:
Пример 11.2. Код страницы получение данных из URL-адреса
<form name="frm_name" id="frm_name" method="get" action="test_form_processor.php"> <p>Имя <input name="firstName" type="text" id="firstName" /> </p> <p>Фамилия <input name="lastName" type="text" id="lastName" /> </p> <p> <input type="submit" name="Submit" value="Submit" /> </p> </form>
180. Сохраните и закройте файл test_form.php.
181. Откройте test_form_ processor.php. Следует внести на страницу test_form_processor.php изменения, поскольку динамический текст на этой странице ищет значение переменной формы firstName. Поскольку метод POST был изменен на GET, значение firstName будет недоступно в виде переменной формы, оно будет доступно только в составе строки запроса.
182. Прикрепить новую переменную: на панели Bindings щелкните на кнопке New Binding. Выберите тип URL variable и введите имя firstName. Нажмите OK.
183. Прикрепить переменную lastName того же типа. — см. 182.
184. Выделите динамический текст {Form.firstName}, окрашенный синим цветом, и нажмите клавишу Del. Поместите курсор перед второй запятой, а на панели Bindings выберите URL\ firstName и нажмите Insert. После этого на странице появится новый динамический текст, выделенный синим цветом: {URL.firstName}.
Псевдокод динамического текста Сказочника имеет определенную структуру и смысл. Фигурные скобки ограничивают блок динамического текста, а внутри них указывается область видимости, после которой следует точка и имя переменной. Это позволяет быстро увидеть область видимости и имя переменной.
185. Поместите курсор после блока firstName и прикрепите на страницу переменную URL.lastName. Две переменные должны располагаться рядом таким образом, чтобы на страницу выводились имя и фамилия пользователя — см. 184.
186. На вкладке Code должно так:
Пример 11.3. Код вывода имени и фамилии пользователя
<p>Thank you, <?php echo $_GET['firstName']; ?> <?php echo $_GET['lastName']; ?>, for filling out my form. </p>
187. Сохраните файл test_form_processor.php.
188. Выделите файлы test_form.php и test_form_processor.php, а затем нажмите кнопку Put File(s). Следует помнить, что до тех пор, пока файлы не загружены на сервер, тестировать их нельзя.
189. Щелкните на файле test_form.php и нажмите F12, чтобы протестировать его в браузере. Введите в поля имя и фамилию, а затем нажмите кнопку Submit. Как и ожидалось, загрузится страница с надписью, содержащей введенные имя и фамилию.
Наибольший интерес здесь представляет URL-адрес. После адреса самой страницы идет знак вопроса и три переменных с указанными значениями:
http://localhost/enisey/ test_form_processor.php?firstName=%CC%E0%F8%E0&lastName=%C3%EE%F0%EA%E8%ED% E0&Submit=Submit
Каждый символ кириллицы в Юникоде (UTF-16), представленный там двумя байтами, превращается в два шестнадцатиричных кода: М -> D0 и 9C. Перед каждым кодом, согласно спецификации URL, ставится знак процента (%).
Три прикрепленные переменные являются строкой запроса. Выводимые на страницу имя и фамилия извлекаются непосредственно из URL-адреса.
Поскольку метод POST скрывает данные от пользователя, он, как правило, применяется для пересылки данных формы, которые затем помещаются в базу данных. Если после ввода в поля формы имени пользователя и пароля они отображаются в адресной строке браузера, где каждый может их увидеть, то, очевидно, это сделает систему безопасности более уязвимой для атак злоумышленников. Помимо этого, метод POST позволяет пересылать значительно больше данных, чем в составе строки URL-адреса при использовании метода GET. Тем не менее, в данном упражнении строки запроса имеют некоторые преимущества перед переменными формы