на тему рефераты Информационно-образоательный портал
Рефераты, курсовые, дипломы, научные работы,
на тему рефераты
на тему рефераты
МЕНЮ|
на тему рефераты
поиск
Web-программирование. Обработка HTML-форм
p align="center"> 2. ПЕРЕДАЧА ДАННЫХ С ПОМОЩЬЮ ФОРМЫ

Рассмотрим пример посылки сообщения из формы по электронной почте.

Листинг e_mail.html. Посылка сообщения из формы по e-mail

<html>

<head>

<title>Посылка формы по е-mail</title>

</head>

<body>

<FORM action=mailto: myaddres@mail.ru enctype=”text/plain” method=”post”>

Нажмите &#147;Cброс&#148; и заполните заказ.<BR>

<INPUT type=reset value=C6poc><BR>

<P>

<TABLE border=0 cellspacing=O cellpadding=5>

<TR>

<TD>Ваше имя:</TD >

<TD>

<INPUT type=text size=33 name=name value=”Прохоров Виктор Сергеевич”>

</TD>

</TR>

<TR>

<TD>Ваш адрес:</TD>

<TD>

<INPUT type=text size=33 name=email value=prohwik@mail.ru >

</TD>

</TR>

<TR>

<TD>Прислать:</TD>

<TD>

<INPUT type=text size=33 name=obj value=”Методические указания”>

</TD>

</TR>

</TABLE>

<INPUT type=submit value=”Послать заказ”>

</FORM>

</body>

</html>

Если поместить этот код в HTML-программу, то на гипертекстовой старичке возникнет картинка:

Пользователь нажимает кнопку «Сброс», и поля принимают значения, установленные по умолчанию. Форма заполняется пользователем, и по нажатию кнопки «Послать заказ» отправляется по адресу myaddres@mail.ru. Обычно браузер не сам отсылает форму, а поручает эту работу почтовой программе, установленной по умолчанию в операционной системе компьютера (например, Outlook). Письмо посылается в виде:

subjct: Форма отправлена из Microsoft Internet Explorer

name = Прохоров Виктор Сергеевич

value=prohwik@mail.ru

obj = «Методические указания»

Письмо составляется из пар имя=значение, которые выбираются по порядку из полей формы.

Можно написать простейший сценарий на РНР типа «Hello, world: сейчас 10 часов утра».

Однако этим сценариям недостает одного -- интерактивного взаимодействия с пользователем.

Поставим задачу написать сценарий, который принимает в параметрах две величины: зарегистрированное имя и пароль пользователя. Если зарегистрированное имя равно root, а пароль -- Z10N0101, следует напечатать: «Доступ открыт для пользователя <имя>» и заблокировать сервер (т. е. вывести стандартный экран Windows «Блокировка» с запросом пароля для разблокирования). Если же данные неверны, необходимо вывести сообщение «Доступ закрыт!».

Сначала рассмотрим наиболее простой способ передачи параметров сценарию -- непосредственный набор их в URL после знака? -- например, в формате login=имя&password=napoль.

Пусть на сервере в корневом каталоге есть сценарий на РНР под названием hello.php. Этот сценарий распознает 2 параметра: login и password.

Поэтому, если задать в адресной строке браузера:

http://localhost/heIlo.php?login=root&password=Z10N0101

то должны получить требуемый результат.

Задача поставлена, можно приступать к ее решению. Но прежде полезно решить аналогичную, но более простую задачу.

Как же нам в сценарии получить строку параметров, переданную после знака вопроса в URL при обращении к сценарию? Для этого можно проанализировать переменную окружения QUERY_STRING, которая в РНР доступна под именем $_SERVER[QUERY_STRING].

Напишем пример, чтобы это проиллюстрировать (листинг qs.php).

Листинг qs.php. Вывод параметров командной строки.

<?php

echo «Данные из командной строки: $_SERVER[QUERY_STRING]»;

?>

Если теперь запустить этот сценарий из браузера (перед этим сохранив его в файле test.php в корневом каталоге сервера) таким образом:

http://localhost/qs.php?this+is+the+world/

то получим документ следующего содержания: Данные из командной строки: this+is+the+world

Обратите внимание на то, что URL-декодирование символов не произошло: строка $_server [' query_string '], как и одноименная переменная окружения, всегда приходит в той же самой форме, в какой она была послана браузером.

Так как РНР изначально создавался именно как язык для Web-программирования, то он дополнительно проводит некоторую работу с переменной query_string перед передачей управления сценарию. А именно, он разбивает ее по пробельным символам (в примере пробелов нет, их заменяют символы +, но эти символы РНР также понимает правильно) и помещает полученные кусочки в массив-список $argv, который впоследствии может быть проанализирован в программе.

Массив $argv используется при программировании на РНР крайне редко, что связано с большими возможностями интерпретатора по разбору данных, поступивших от пользователя. Однако в некоторых (учебных) ситуациях его применение оправдано.

2.1. Форма для передачи данных

Вернемся к поставленной задаче. Как сделать, чтобы пользователь мог в удобной форме ввести зарегистрированное имя и пароль? Очевидно, придется создать что-нибудь типа диалогового окна Windows, только в браузере. Для этого понадобится HTML-документ (например, form.html в корневом каталоге) с элементами этого диалога -- текстовыми полями -- и кнопкой.

Листинг form.html. Страница с формой

<html>

<body>

<form action=hello.php>

Имя: <input type=text name=”login” value=””<br>

Пароль: <input type=password name=”password” value=””<br>

<input type=”submit” name=”go” vа1ue = “Передать “ ><br>

<input type=”reset” vа1ue = “Очистить форму” ><br>

</form>

</body>

</html>

Загрузим документ в браузер. Теперь, если заполнить поля ввода и нажать кнопку, браузер обратится к сценарию hello.php и передаст через? все атрибуты, расположенные внутри тегов <input> в форме и разделенные символом & в строке параметров. Заметьте, что в атрибуте action тега <form> задан относительный путь, т. е. сценарий hello.php будет искаться браузером в том же самом каталоге, что и файл form.html.

Все перекодирования и преобразования, которые нужны для URL-кодирования данных, осуществляются браузером автоматически. В частности, буквы кириллицы превратятся в %хх, где хх -- некоторое шестнадцатеричное число, обозначающее код символа.

Использование форм позволяет не обременять пользователя такой информацией, как имя сценария, его параметры и т. д. Он всегда будет иметь дело только с полями, переключателями и кнопками формы:

Осталось определиться, как можно извлечь $login и $password из строки параметров.

Можно попытаться разобрать ее «вручную» при помощи стандартных функций работы со строками, которых в РНР множество. Однако прежде чем браться за какое-то дело, следует внимательно посмотреть и другие способы его выполнения.

2.2. Трансляция полей формы

Мы не хотим заниматься прямым разбором переменной окружения query_string, в которой хранятся параметры сценария. И правильно -- интерпретатор перед запуском сценария делает все сам. Причем независимо от того, каким методом -- get или post -- воспользовался браузер. То есть, РНР сам определяет, какой метод был задействован (информация об этом доступна через переменную окружения request_method), и получает данные либо из query_string, либо из стандартного входного потока.

Все данные из полей формы РНР помещает в глобальный массив $_REQUEST.

В нашем случае значение поля login после начала работы программы будет храниться в $_REQUEST [' login '], а значение поля password -- в $_REQUEST ['password'].

Кроме того, чтобы можно было как-то разделить GET-параметры от POST-данных, РНР также создает массивы $_GET и $_POST, заполняя их соответствующими значениями. Массив $_REQUEST представляет собой объединение этих двух массивов.

Листинг hello.php. Сценарий извлечения текста из полей формы

<?php

if ($_REQUEST['login']==”root” && $_REQUEST['password']==”Z10N0101”)

{

echo «Доступ открыт для пользователя $_REQUEST[login]»;

//Команда блокирования рабочей станции (работает в NT-системах)

system(“rundll32.exe user32.dll,LockWorkStation”);

}

else

{

echo “Доступ закрыт!”;

}

?>

Если при вводе данных будет совершена ошибка, например, неправильно введено имя:

то доступ будет закрыт:

Здесь применена инструкция if-else (условное выполнение блока) и функция system() (запуск команды операционной системы).

Инструкция if-else -- условный оператор. Его формат таков:

if (логическое_выражение)

инструкция_1;

else

инструкция_2;

Действие инструкции следующее: если логическое_выражение истинно, то выполняется инструкция_1, а иначе -- инструкция_2.

Как и в любом другом языке, конструкция else может опускаться, в этом случае при получении лолжного значения просто ничего не делается.

Пример:

if ($salary>=100 && $salary<=5000) echo «Вам еще расти и расти»;

Else

echo «Ну и правильно -- не в деньгах счастье.»;

Если инструкция_1 или инструкция_2 должны состоять из нескольких команд, то они, как всегда, заключаются в фигурные скобки.

Пример:

if ($a > $b) { print “а больше b”; $c = $b; ) }

elseif ($a = = $b) { print “а равно b”; $c = $a; ) }

else { print “а меньше b”; $c = $a; }

echo «<bг>Минимальное из чисел: $с»;

Это не опечатка: elseif пишется слитно, вместо else if. Так тоже можно писать.

Конструкция if-else имеет еще один альтернативный синтаксис:

if (логическое-_выражение) :

команды;

elseif (другое_логическое_вьражение) :

другие_команды;

else:

иначе_команды;

endif

Обратите внимание на расположение двоеточия (:). Если его пропустить, будет сгенерировано сообщение об ошибке. И еще, как обычно, блоки elseif и else можно опускать.

Страницы: 1, 2, 3, 4, 5, 6, 7



© 2003-2013
Рефераты бесплатно, курсовые, рефераты биология, большая бибилиотека рефератов, дипломы, научные работы, рефераты право, рефераты, рефераты скачать, рефераты литература, курсовые работы, реферат, доклады, рефераты медицина, рефераты на тему, сочинения, реферат бесплатно, рефераты авиация, рефераты психология, рефераты математика, рефераты кулинария, рефераты логистика, рефераты анатомия, рефераты маркетинг, рефераты релиния, рефераты социология, рефераты менеджемент.