50090 (597472), страница 2
Текст из файла (страница 2)
иначе_команды;
endif
Обратите внимание на расположение двоеточия (:). Если его пропустить, будет сгенерировано сообщение об ошибке. И еще, как обычно, блоки elseif и else можно опускать.
Для вставки HTML-кода в тело сценария достаточно закрыть скобку ?>, написать этот код, а затем снова открыть ее при помощи , и продолжать программу.
Чаще нужно делать не вставки HTML внутрь программы, а вставки кода внутрь HTML. Целесообразно отделять HTML-код от программы, например, поместить его в отдельный файл, который затем подключается к программе при помощи инструкции include.
Вот, например, как будет выглядеть сценарий, который приветствует пользователя по имени, с применением альтернативного синтаксиса if-eise.
Листинг ifelse.php. Сценарий, который приветствует пользователя по имени
Альтернативный синтаксис if-else. - ->
if (isset($_REQUEST[’go’])):?>
Привет, !
Ваше имя:
а1uе=”0тослать!”>
В окне браузера форма выглядит следующим образом:
Теперь усовершенствуем скрипт — сделаем так, чтобы при запуске без параметров сценарий выдавал документ с формой, а при нажатии кнопки — выводил нужный текст. Самый простой способ определить, был ли сценарий запущен без параметров — проверить, существует ли переменная с именем, совпадающим с именем кнопки отправки. Если такая переменная существует, то пользователь запустил программу, нажав кнопку (листинг 4).
Листинг lock.php. Усовершенствованный скрипт блокировки сервера
if ( !isset($_REQUEST[’doGo’] ) )
{
?>
Имя:
Пароль:
}
else
{
if ($_REQUEST[’login’]==”root” && $_REQUEST[’password’]==”Zl0N0101”)
{
echo «Доступ открыт для пользователя $_REQUEST[login]»;
//Команда блокирования рабочей станции (работает в NT-системах)
system(“rundll32.exe user32.dll,LockWorkStation”);
}
else
{
echo “Доступ закрыт!”;
}
}
?>
В окне браузера форма выглядит следующим образом:
Из этого примера можно почерпнуть несколько полезных приемов:
● Конструкция является более коротким обозначением для , и предназначена для того, чтобы вставлять величины прямо в HTML-страницу.
● В параметре action тега не задано явно имя файла сценария, а извлекли его из переменной окружения 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-адрес:
Ваш браузер:
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:
Январь
Февраль
Mapт
Апрель
Maй
Июнь
Июль
Август
Ceнтябрь
Oктябрь
Hоябрь
Декабрь
После отправки формы параметры передаются так: name=value1&name=value2&name=value3...
Переменная $name = month2 будет содержать только последнее значение (value N).
Пусть выбрали Maй и Август. Тогда после отправки формы сценарию придет строка параметров month2 = Maй&month2 = Август, и в переменной $_REQUEST ['month2'] окажется, конечно, только Август.
Первый пункт (Maй) потерялся. Для решения подобных проблем в РНР предусмотрена возможность давать имена полям формы в виде «массива с индексами» month2[](квадратные скобки - это признак массива.):
Январь
Февраль
Mapт
Апрель
Maй
Июнь
Июль
Август
Ceнтябрь
Oктябрь
Hоябрь
Декабрь
Теперь сценарию придет строка month2[]= Maй&month2[]= Август.
Интерпретатор обнаружит, что мы хотим создать «автомассив», т. е. массив, который не содержит пропусков и у которого индексация начинается с нуля. Интерпретатор создаст запись $_REQUEST ['month2'] типа «массив», содержимое которого следующее: array (0=> » Maй «, l=> » Август «). Как мы видим, в результате ничего не пропало — данные только слегка видоизменились.
В результате мы получим в $_REQUEST массив массивов (или двумерный массив, как его еще называют).
Таким образом, множественный список преобразован в массив. Массив представляет собой индексированную совокупность переменных одного типа. Каждая переменная или элемент массива имеет свой индекс, т.е. все элементы массива последовательно пронумерованы.
Обход массива в цикле организуют (обрабатывают его элементы) с помощью цикла foreach. Принцип работы этого цикла прост: при проходе каждого элемента массива в переменную $key помещается индекс этого элемента, а в переменную $value – его значение.
Нам даже не нужно знать количество переданных элементов списка. Предварительно лишь нужно сообщить РНР, что мы будем передавать массив:
Напомним, что квадратные скобки — это признак массива.
Обрабатывается массив так:
foreach($month2 as $key=>$value)
echo “$key = $value
”;
Листинг month2.html. Форма списка с множественным выбором
Обработка списка с множественным выбором
Январь
Февраль
Mapт
Апрель
Maй
Июнь
Июль
Август
Ceнтябрь
Oктябрь
Hоябрь
Декабрь
а1ue = “Нажмите кнопку, чтобы запустить сценарий! «>
Листинг hello2.php. Обработка списка с множественным выбором при включенной директиве register_globals
echo “г>Список month2:
” ;
foreach ($month2 as $key=>$value)
echo “$key = $value
”;
?>
В окне браузера форма выглядит следующим образом:
Природа этой ошибки подробно будет рассмотрена в п. 3: «Какой режим выбрать: register_globals = off & on?». Здесь заметим лишь, что мы обратились к переменной $month2 как к глобальной, что требует наличия включенной директивы register_globals=on. Если эта директива отключена (register_globals=off), что настоятельно рекомендуется делать, то нужное значение можно получить через глобальный массив $_REQUEST['month2']. Поэтому сделаем необходимые исправления.
Листинг hello2.php. Обработка списка с множественным выбором при отключенной директиве register_globals