p align="left">Для вставки 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: его код встроен в сам сценарий. 2.3. Трансляция переменных окружения «Интеллектуальные» возможности РНР на этом далеко не исчерпываются. Дело в том, что в переменные преобразуются не только все данные формы, но и переменные окружения (включая query_string, content_length и многие другие). Например, приведем сценарий (листинг 5), печатающий IP-адрес пользователя, который его запустил, а также тип его браузера (эти данные хранятся в переменных окружения remote_user и http_user_agent, доступных в скрипте через массив $_server). Листинг ip.php. Вывод IP-адреса из браузера пользователя <! - - Вывод IP-адреса и браузера пользователя - -> Ваш IP-адрес: <?=$_SERVER['REMOTE_ADDR']?><br> Ваш браузер: <?=$_SERVER['HTTP_USER_AGENT']?>
2.4. Работа с cookies Использование cookies удобно как для программистов, так и для пользователей. Пользователям не приходится каждым раз заново вводить информацию о себе, а программистам cookies помогают легко и надежно сохранять информацию о пользователях. Cookies -- это файлы, хранящие строки, содержащие пары «имя-значение». С этими строками связан URL, по которому браузер определяет, нужно ли посылать cookies на сервер. В отличие от сеансовых переменных, которые хранятся на сервере, cookies расположены на клиентской машине. Установка cookies Установка cookies производится с помощью функции setcookie: bool setcookie (string name [, string value [, int expire [, string path [, string domain [, int secure]]]]]) Эта функция имеет следующие аргументы: name -- имя cookie; value -- значение, хранящееся в copkie с именем name; expire -- время в секундах с 1 января 1970 года. По истечении этого времени cookie становится недействительным; path -- путь, по которому доступен cookie; domain -- домен, из которого доступен cookie; secure -- директива, определяющая, доступен ли cookie не по запросу HTTPS (HyperText Transmission Protocol, Secure -- протокол защищенной передачи гипертекстов). По умолчанию эта директива имеет значение 0, что означает возможность доступа к cookie по обычному запросу HTTP. 2.4.1. Пример приложения с cookies Создадим сценарий, подсчитывающий при помощи cookies количество обращений посетителя к странице. Необходимо устанавливать cookie перед отправкой в браузер каких-либо заголовков, поскольку сами cookies устанавливаются в виде заголовков. Потому, если установить cookies после какого-либо текста, отправляемого в браузер, то возникнет ошибочная ситуация. Заметим, что в листинге мы обращаемся к переменной $counter, в которой хранится значение cookie, как к глобальной, что требует наличия включенной директивы register globais. Если эта директива отключена, то значение, хранящееся в cookie, можно получить через глобальные массивы $HTTP_COOKIE VARS[»name»] и $_COOKIE[»name»]. Листинг cookie.php. В cookie с именем counter храниться число посещений страницы пользователем (register globais=off) <? $_СООКIЕ['counter']++; setcookie(“counter”,$counter); echo 'Вы посетили эту страницу: '.$_COOKIE['counter'].' раз.'; ?> В окне браузера выглядит следующим образом:
Некоторые пользователи отключают cookies в своих браузерах. Поэтому для корректной работы приложения, использующего cookies, в него следует помещать код, проверяющий, включены ли cookies у посетителя. Если нет, то пользователю сообщается о необходимости включить cookies. Листинг cookie_pr. Пример кода проверяющего включение cookie <? if (!$cookie) { //посылаем заголовок переадресации на страницу, //с которой будет предпринята попытка установить cookie header(“Location: $PHP_SELF?cookie=l”); // устанавливаем cookie с именем «test» setcookie(“test”,”1”); } else { if (!$test) { echo(«Для корректной работы приложения необходимо включить cookies»); } else { //cookie включены, переходим на нужную страницу header(“Location: http://localhost/testl.php “); } } ?> Функцию setcookie () всего лишь посылает в браузер пользователя cookie с указанным именем и значением. 2.5. Обработка списков с множественным выбором В списках множественного выбора можно выбрать не одно, а сразу несколько значений. Чтобы сделать список с множественным выбором, необходимо для тега SELECT указать атрибут multiple: <select name=month2 multiple> <option value=01>Январь</option> <option value=02>Февраль</option> <option value=03>Mapт</option> <option value=04>Апрель</option> <option value=05>Maй</option> <option value=06>Июнь</option> <option value=07>Июль</option> <option value=08>Август</option> <option value=09>Ceнтябрь</option> <option value=10>Oктябрь</option> <option value=11>Hоябрь</option> <option value=12>Декабрь</option> </select> После отправки формы параметры передаются так: name=value1&name=value2&name=value3... Переменная $name = month2 будет содержать только последнее значение (value N). Пусть выбрали Maй и Август. Тогда после отправки формы сценарию придет строка параметров month2 = Maй&month2 = Август, и в переменной $_REQUEST ['month2'] окажется, конечно, только Август. Первый пункт (Maй) потерялся. Для решения подобных проблем в РНР предусмотрена возможность давать имена полям формы в виде «массива с индексами» month2[](квадратные скобки - это признак массива.): <select name=”month2[]”multiple> <option value=01>Январь</option> <option value=02>Февраль</option> <option value=03>Mapт</option> <option value=04>Апрель</option>
Страницы: 1, 2, 3, 4, 5, 6, 7
|