11.4.2. Получение данных из URL-адреса

Выше мы заполняли форму с небольшим числом полей и переходили на страницу, где отображалось введенное значение. Известно, что значение формы было направлено в файл 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. Тем не менее, в данном упражнении строки запроса имеют некоторые преимущества перед переменными формы