- •Тема 1 Основы cgi-программирования
- •1.1 Методы передачи данных
- •1.2 Передача документа пользователю
- •1.3 Передача информации cgi-сценарию
- •Тема 2 Характеристика языка php
- •2.1 Принцип работы php
- •2.2 Переменные, константы, выражения
- •Тема 3 Работа с данными формы
- •3.1 Передача данных
- •3.2 Трансляция полей формы в переменные
- •Тема 4 Конструкции языка
- •4.1 Условные инструкции
- •4.2 Инструкции циклов
- •4.3 Инструкции включения
- •Тема 5 Ассоциативные массивы
- •5.1 Списки и ассоциативные массивы
- •5.2 Операции над массивами
- •5.3 Списки и строки
- •5.4 Сериализация
- •Тема 6 Работа с массивами
- •6.1 Сортировка массивов
- •6.2 Функции для работы с массивами
- •Тема 7 Функции и области видимости
- •7.1 Формат определения функции, передача параметров
- •7.2 Глобальные, локальные, статические переменные
- •7.3 Рекурсия, вложенные и условно-определяемые функции
- •7.4 Передача функций по ссылке и возврат функцией ссылки
- •Тема 8 Строковые функции
- •8.1 Функции работы со строками
- •8.2 Работа с блоками текста
- •Тема 9 Математические функции
- •9.1 Встроенные константы
- •9.2 Встроенные функции
- •Тема 10 Работа с файлами и каталогами,
- •10.1 Функции работы с файлами
- •10.2 Блокирование файла
- •10.3 Функции работы с каталогами
- •10.4 Запуск внешних программ
- •Тема 11 Работа с датами и временем,
- •11.1 Представление времени в формате timestamp
- •11.2 Работа с датами, григорианский календарь
- •11.3 Посылка писем через php
- •Тема 12 Работа с www
- •12.1 Установка заголовков ответа
- •12.2 Работа с Cookies
- •Тема 13 Управление интерпретатором
- •13.1 Управление интерпретатором
- •13.2 Управление сессиями
- •Тема 14 Работа с базой данных mysql
- •14.1 Соединение с базой данных
- •14.2 Выполнение запросов к базе данных
- •Тема 15 Загрузка файлов на сервер
- •15.1 Multipart-формы, тег выбора файла
- •15.2 Поддержка закачки в php
- •Учебное издание
- •Разработка программного обеспечения на платформе net: php.Net
- •246019 Г. Гомель, ул. Советская, 104
Тема 3 Работа с данными формы
3.1 Передача данных
3.2 Трансляция полей формы в переменные
3.1 Передача данных
Web-программирование в большей части (или хотя бы наполовину) представляет собой обработку различных данных, введенных пользователем – т. е., обработку форм.
Передача данных командной строкой. Напишем сценарий, который принимает в параметрах Имя и возраст пользователя и выводит: "Привет, <имя>! Я знаю, вам <возраст> лет!".
Рассмотрим способ передачи имени и возраста сценарию – непосредственный набор их в URL после знака ? – например, в формате
http://www.script.php?name=имя&age=возраст
Пусть на сервере в корневом каталоге есть сценарий на РНР под названием hello.php. Наш сценарий распознает 2 параметра: name и аgе. Он должен отработать и вывести следующую HTML-страницу:
<html>
<body>
Привет, name! Я знаю, Вам age лет!
</body>
</html>
Нужно name и age заменить на соответствующие значения. Таким образом, если задать в адресной строке браузера
http://www.somehost.com/script.php?name=Vasya&age=20
мы должны получить страницу с требуемым результатом.
Чтобы в сценарии получить строку параметров, переданную после знака вопроса в URL при обращении к сценарию, можно проанализировать переменную окружения QUERY_STRING, которая в РНР доступна под именем $QUERY_STRING.
<html>
<body>
<?
print "Данные из командной строки: $QUERY_STRING";
?>
</body>
</html>
Если теперь мы запустим этот сценарий из браузера (перед этим сохранив его в файле test.php в корневом каталоге сервера) примерно следующим образом:
http://www.myhost.com/test.php?aaa+bbb+ccc+ddd
то получим документ следующего содержания:
Данные из командной строки: aaa+bbb+ccc+ddd
Обратите внимание на то, что URL-декодирование символов не произошло: строка $QUERY_STRING, как и одноименная переменная окружения, всегда приходит в той же самой форме, в какой она была послана браузером.
Так как РНР изначально создавался именно как язык для Web-программирования, то он дополнительно проводит некоторую работу с переменной $QUERY_STRING перед тем, как управление будет передано сценарию, а именно, он разбивает ее по пробельным символам (в нашем примере пробелов нет, их заменяют символы +, но эти символы РНР также понимает правильно) и помещает полученные кусочки в массив-список $argv, который впоследствии может быть проанализирован в программе.
Однако массив $argv используется при программировании на РНР крайне редко, что связано с гораздо большими возможностями интерпретатора по разбору данных, поступивших от пользователя. Однако в некоторых ситуациях его применение оправдано.
Формы. Для того, чтобы пользователь мог в удобной форме ввести свое имя и возраст, нужно создать обычный HTML-документ (например, form.html) с элементами этого диалога – текстовыми полями – и кнопкой, т.е. форму:
<html>
<form action=hello.php>
Введите имя:
<input type=text name="name" value="Елена"><br>
Ваш возраст:
<input type=text name="age" value="5"><br>
<input type=submit value="Отправить">
</form>
</body>
</html>
Загрузим наш документ в браузер. Теперь, если ввести в поле с именем свое имя, а в поле для возраста – свой возраст и нажать кнопку, браузер автоматически обратится к сценарию hello.php и передаст через ? все атрибуты, расположенные внутри тэгов <INPUT> в форме и разделенные символом & в строке параметров. Заметьте, что в атрибуте action тэга <form> мы задали относительный путь, т.е. сценарий hello.php будет искаться браузером в том же самом каталоге, что и файл form.html.
Все перекодирования и преобразования, которые нужны для URL-кодирования данных, осуществляются браузером автоматически. В частности, буквы кириллицы превратятся в %xx, где хх – шестнадцатеричное число, обозначающее код символа.
Листинг hello.php – модель простого РНР-сценария
<html>
<body>
<?
print "Привет, ".$_GET['name'].
". Вам ".$_GET['age']." лет.";
?>
</body>
</html>
