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 можно опускать.

Для вставки HTML-кода в тело сценария достаточно закрыть скобку ?>, написать этот код, а затем снова открыть ее при помощи <?, и продолжать программу.

Чаще нужно делать не вставки HTML внутрь программы, а вставки кода внутрь HTML. Целесообразно отделять HTML-код от программы, например, поместить его в отдельный файл, который затем подключается к программе при помощи инструкции include.

Вот, например, как будет выглядеть сценарий, который приветствует пользователя по имени, с применением альтернативного синтаксиса if-eise.

Листинг ifelse.php. Сценарий, который приветствует пользователя по имени

<! - - Альтернативный синтаксис if-else. - ->

<?

if (isset($_REQUEST[’go’])):?>

Привет, <?=$_REQUEST[’name’]?>!

<?else:?>

<form action=”<?=$_SERVER[’REQUEST_URL’]?>” method=post>

Ваше имя: <input type=text name=name><br>

<input type=submit name=go vа1uе=”0тослать!”>

<?endif?>

В окне браузера форма выглядит следующим образом:


Теперь усовершенствуем скрипт — сделаем так, чтобы при запуске без параметров сценарий выдавал документ с формой, а при нажатии кнопки — выводил нужный текст. Самый простой способ определить, был ли сценарий запущен без параметров — проверить, существует ли переменная с именем, совпадающим с именем кнопки отправки. Если такая переменная существует, то пользователь запустил программу, нажав кнопку (листинг 4).

Листинг lock.php. Усовершенствованный скрипт блокировки сервера

<?

if ( !isset($_REQUEST[’doGo’] ) )

{

?>

<form action=”<?=$_SERVER[’SCRIPT_NAME’]?>”>

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

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

<input type=submit name=”doGo” value=”Haжмитe кнопку!”>

</form>

<?

}

else

{

if ($_REQUEST[’login’]==”root” && $_REQUEST[’password’]==”Zl0N0101”)

{

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

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

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

}

else

{

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

}

}

?>

В окне браузера форма выглядит следующим образом:

 

 

 

 


Из этого примера можно почерпнуть несколько полезных приемов:

● Конструкция <?=выражение?> является более коротким обозначением для <?echo выражение?>, и предназначена для того, чтобы вставлять величины прямо в HTML-страницу.

● В параметре action тега <form> не задано явно имя файла сценария, а извлекли его из переменной окружения script_name (которая, как и все такие переменные, хранится в массиве $_server). Это позволило не «привязываться» к имени файла, т. е. теперь можно его в любой момент переименовать без потери функциональности.

В старых версиях РНР 4 переменная $script_name могла содержать неправильное значение. Например, если воспользоваться способом инсталляции, когда устанавливают РНР как внешнюю программу, а не модуль Apache, в РНР версии 4.1 и младше переменная $script_name будет содержать строку /_php/php.exe, что, конечно же, нам не подходит. «Правильное» значение в этом случае можно найти в переменной окружения redirect_url или в переменной РНР $redirect_url. Однако учтите, что в Unix, наоборот, redirect_url работать не будет! РНР 5 всех этих недостатков лишен.

● Исчезла необходимость в промежуточном файле form.html: его код встроен в сам сценарий.


Информация о работе «Web-программирование. Обработка HTML-форм»
Раздел: Информатика, программирование
Количество знаков с пробелами: 65231
Количество таблиц: 1
Количество изображений: 45

Похожие работы

Скачать
183471
45
12

... Java, JavaScript и встроенные в сервер средства LiveConnect. Более мощными реляционными возможностями доступа к базе данных и более эффективным выполнением виртуальной Java-машины будут расширены услуги разработки приложений, обеспечиваемых в Enterprise Server 2.0,. Сервис управления. В дополнение к использованию встроенной машины каталога LDAP Enterprise Server 2.0 будет управляем через общие ...

Скачать
255323
33
27

... в помещении представлена на рисунке 4.1 Рисунок 4.1 - Схема размещения светильников в аудитории № 209. Заключение В работе проведено исследование использования программ дистанционного обучения для подготовки учебно-методической документации, описаны их положительные стороны и выявлены основные проблемы. В результате проведенного исследования разработано web-приложение "R@Learning ...

Скачать
22762
0
4

текста, насыщенного изображениями, звуком, анимацией, видеоклипами и гипертекстовыми ссылками на другие документы. Можно работать на Web без знания языка HTML, поскольку тексты HTML могут создаваться разными специальными редакторами и конвертерами. Но писать непосредственно на HTML нетрудно. Возможно, это даже легче, чем изучать HTML-редактор или конвертер, которые часто ограничены в своих ...

Скачать
50516
1
25

... высокого быстродействия. Их реализация существенно снижает скорость сервера. Эти возможности не являются критичными при создании web-приложений, что в сочетании с высоким быстродействием и малой ценой позволило серверу приобрести большую популярность.   3.2. Примеры использования PHP совместно с MySQL   3.2.1. Работа с формами В этом примере показано как в PHP легко обрабатывать данные с ...

0 комментариев


Наверх