Анимация
JavaScript
|
Главная Библионтека Всякие там ?, &, %... К счастью, существуют удобные возможности языка HTML, которые, конечно, поддерживаются всеми браузерами. Итак, пусть у нас на сервере в корневом каталоге есть сценарий на PHP под названием hello.php. Наш сценарий распознает 2 параметра: name и age. Он должен отработать и вывести следующую HTML-страницу: <html><body> Привет, name! Я знаю, Вам age лет! </body></html> Разумеется, нужно name и age заменить на соответствующие значения. Таким образом, если задать в адресной строке браузера http: www.somehost.com/script.cgi?name=Vasya&age=20 мы должны получить страницу с требуемым результатом. Как только задача осознана, можно приступать к ее решению. Но прежде бывает полезно решить аналогичную, но более простую задачу. Итак, как же нам в сценарии получить строку параметров, переданную после знака вопроса в URL при обращении к сценарию? Как было указано в первой части книги, для этого можно проанализировать переменную окружения query string, которая в PHP доступна под именем $QUERY STRING. Напишем небольшой пример, чтобы это проиллюстрировать (листинг 8.1). i Листинг 8.1. Вывод параметров командной строки <html><body> <? echo "Данн1е из командной строки: $QUERY STRING"; ?> </body></html> Если теперь мы запустим этот сценарий из браузера (перед этим сохранив его в файле test.php в корневом каталоге сервера) примерно вот таким образом: http: www.myhost.com/test.php?aaa+bbb+ccc+ddd то получим документ следующего содержания: Данные из командной строки: aaa+bbb+ccc+ddd Обратите внимание на то, что URL-декодирование символов не произошло: строка $QUERY STRING, как и одноименная переменная окружения, всегда приходит в той же самой форме, в какой она была послана браузером. Давайте запомним этот небольшой пример - он еще послужит нам в будущем. Так как PHP изначально создавался именно как язык для Web-программирования, то он дополнительно проводит некоторую работу с переменной $query string перед тем, как управление будет передано сценарию. А именно, он разбивает ее по пробельным символам (в нашем примере пробелов нет, их заменяют символы +, но эти символы PHP также понимает правильно) и помещает полученные кусочки в массив-список $argv, который впоследствии может быть проанализирован в программе. Заметьте, что здесь действует точно такая же техника, которая принята в Си, с точностью до названия массива с аргументами. Все же массив $argv используется при программировании на PHP крайне редко, что связано с гораздо большими возможностями интерпретатора по разбору данных, поступивших от пользователя. Однако в некоторых (обычно учебных) ситуациях его применение оправдано, так что не будем забывать об этой возможности. Формы Вернемся к поставленной задаче. Как нам сделать, чтобы пользователь мог в удобной форме ввести свое имя и возраст? Очевидно, нам придется создать что-нибудь типа диалогового окна Windows, только в браузере. Итак, нам понадобится обгчный HTML-документ (например, по имени form.html в корневом каталоге) с элементами этого диалога - текстовыми полями - и кнопкой. Давайте возьмем ту же самую форму, которую я уже приводил в примере в первой части книги, только теперь мы уже будем не просто разбирать, как и куда поступают данные, а напишем сценарий, который эти данные будет обрабатывать (листинг 8.2). i Листинг 8.2. f02ЛП. html: страница с формой <html><body> <form action=hello.php> Введите имя: <input type=text name="name" value="НеизвестнIЙ"><br> Введите возраст: <input type=text name="age" value="неопределеннIЙ"><br> <input type=submit value="Нажмите кнопку, чтобы запустить сценарий!"> </form> </body></html> Загрузим наш документ в браузер. Теперь, если ввести в поле с именем свое имя, а в поле для возраста - свой возраст и нажать кнопку, браузер автоматически обратится к сценарию hello.php и передаст через ? все атрибуты, расположенные внутри тэгов <input> в форме и разделенные символом & в строке параметров. Заметьте, что в атрибуте action тэга <form> мы задали относительный путь, т. е. сценарий hello.php будет искаться браузером в том же самом каталоге, что и файл form.html . Как мы знаем, все перекодирования и преобразования, которые нужны для URL-кодирования данных, осуществляются браузером автоматически. В частности, буквы hello.php - модель простого PHP-сценария <html><body> <? получаем в $name имя из параметров, а в $age - возраст echo "Привет, $name!<br> Я знаю, Вам $age лет!"; ?> </html></body> Осталось теперь только определиться, как мы можем извлечь $name и $age из строки параметров. Конечно, мы можем попытаться разобрать ее "вручную" при помощи стандартных функций работы со строками (которых в PHP великое множество), и этот прием действительно будет работать. Однако, прежде чем браться за ненужное дело, давайте посмотрим, что нам предлагает сам язык. Трансляция полей формы в переменные Итак, мы не хотим заниматься прямым разбором переменной окружения QUERYSTRING, в которой хранятся параметры сценария. И правильно не хотим - интерпретатор перед запуском сценария делает все сам. Причем независимо от того, каким методом - get или post - воспользовался "браузер". То есть, PHP сам определяет, какой метод был задействован (благо, информация об этом доступна через переменную окружения request method), и получает данные либо из QUERY STRING, либо из стандартного входного потока. Это крайне удобно и достойно подражания, вообще говоря, в любых CGI-сценариях. А именно, интерпретатор все данные из полей формы преобразует в глобальные одноименные переменные. В нашем случае значение поля name после начала работы программы будет храниться в переменной $name, а значение поля age - в переменной $age. То есть, не надо ничего ниоткуда "получать" - все уже установлено и распаковано из URL-кодировки. Максимум удобств, минимум затрат, не правда ли? К тому же, еще и работает быстрее, чем аналогичный кустарный код, написанный на PHP, потому что разработчики PHP предусмотрели функцию разбора командной строки на Си. кириллицы превратятся в %XX, где XX - некоторое шестнадцатеричное число, обозначающее код символа. Использование форм позволяет в принципе не нагружать пользователя такой информацией, как имя сценария, его параметры и т. д. Он всегда будет иметь дело только с полями, переключателями и кнопками формы. ! Листинг 8.3. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 [ 47 ] 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 |