Если при вводе данных будет совершена ошибка, например, неправильно введено имя:
то доступ будет закрыт:
Здесь применена инструкция 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: его код встроен в сам сценарий.
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’]?>
Использование 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(HyperTextTransmissionProtocol, Secure — протокол защищенной передачи гипертекстов). По умолчанию эта директива имеет значение 0, что означает возможность доступа к cookie по обычному запросу HTTP.
2.4.1. Пример приложения с cookies
Создадим сценарий, подсчитывающий при помощи cookiesколичество обращений посетителя к странице. Необходимо устанавливать cookie перед отправкой в браузер каких-либо заголовков, поскольку сами cookies устанавливаются в виде заголовков. Потому, если установить cookies после какого-либо текста, отправляемого в браузер, то возникнет ошибочная ситуация.
Заметим, что в листинге мы обращаемся к переменной $counter, в которой хранится значение cookie, как к глобальной, что требует наличия включенной директивы registerglobais. Если эта директива отключена, то значение, хранящееся в cookie, можно получить через глобальные массивы $HTTP_COOKIEVARS[»name»] и $_COOKIE[»name»].
Листинг cookie.php. В cookie с именем counter храниться число посещений страницы пользователем (registerglobais=off)
<?
$_СООКIЕ[’counter’]++;
setcookie(“counter”,$counter);
echo 'Вы посетили эту страницу: '.$_COOKIE['counter'].' раз.';
?>
В окне браузера выглядит следующим образом:
Некоторые пользователи отключают cookies в своих браузерах. Поэтому для корректной работы приложения, использующего cookies, в него следует помещать код, проверяющий, включены ли cookies у посетителя. Если нет, то пользователю сообщается о необходимости включить cookies.
Листинг cookie_pr. Пример кода проверяющего включение cookie