Главная > Программирование > РНР: настольная книга программиста
<< Предыдущий параграф
Следующий параграф >>
<< Предыдущий параграф Следующий параграф >>
Макеты страниц

13.8. Конструкция if ... else в PHP

Оператору if может сопутствовать еще один оператор — else. Это выглядит так:

if($s) ++$s;

else echo "s = 0";

Если выражение $s в операторе if истинно (true), то выполняется первый оператор ++$s;. Если выражение $s ложно (false), выполняется второй оператор: echo "s = 0";. Это позволяет в зависимости от значения выражения в условии исполнять одну из двух взаимоисключающих ветвей. Для увеличения количества возможных вариантов внбора пары if...else можно объединить. Например, создадим форму, в которую будем вводить значение переменной $name — какое-нибудь имя. После выполнения скрипта на основе данных, введенных в переменная будет

ремещена в файл (например, test.php)для обработки. Там на основании значения этой переменной будет выполняться та или иная функция:

Файл test.php

<?

if ($name == "Саша") OneFunct();

else if ($name == "Таня") OneFunct1();

else if ($name == "Миша") 0neFunct2();

else // по умолчанию использовать не обязательно

echo "ошибка ввода, такое имя не найдено";

Каждое условие будет проверяться в свою очередь. Оператор, следующий за первым if, условие которого истинно, будет исполнен. Все нижеследующие операторы if будут проигнорированы, не смотря на значения их условий. Если ни одно из проверяемых выражений не возвратит true, то выполнится оператор по умолчанию — следующий за else.

Общую форму оператора конструкции if, содержащего ветвь else, можно записать следующим образом;

if (условие) {

    Оператор_ветви_Если_То_1;

    Оператор_ветви_Если_То_2;

    ...

    Оператор_ветви_Если_То последний;

}

else {

    Оператор_ветви_Если_Иначе_1;

    Оператор_ветви_Если_Иначе_2;

    ...

    Оператор_ветви_Если_Иначе_последний;

}

Если в ветви if или else находится только один оператор, то операторные скобки ({}) можно не открывать:

if (условие)

    Единственный_оператор_ветви_Если_То

else

    Единственный_оператор_ветви_Если_Иначе;

В последнем случае конструкция if ... else выглядит следующим образом (рис. 13.1).

Допускается любое количество операторов, вложенных в if. Следите за тем, чтобы все операторы else соответствовали своим if. Приведем пример того, какие надо делать.

Рис. 13.1. Конструкция if ... else

Создадим два файла: один — index.html, другой — test.php. Пользователи будут вводить имя в указанную форму, после этого скрипт будет обрабатывать данную форму и выводить, есть такой пользователь в базе данных или нет. Количество пользователей сократим до двух, чтобы понятнее разъяснить саму суть выполнения программы:

<html>

<head>

<title>Программа</title>

</head>

<body>

<form action="test.php" method="POST">

Name: <input type="text" name="name">

<input type="submit">

</form>

</form>

</body>

</html>

Этот файл показывает содержимое формы, через которую задаются значения переменной $name. После того как значение будет задано, переходим к файлу test.php:

<?

if ($name != "Саша")

if ($name == "Таня")

    echo "Вам придется зарегистрироваться!";

else

    echo "Вы уже зарегистрированы у нас!";

?>

После того как будет введено значение переменной, обработка ее будет происходить в этом файле. Но в связи с тем что написание самого скрипта будет выдаваться неверное значение, т. е.: пользователь по имени Саша уже зарегистрирован, а пользователь по имени Таня — нет. Проанализируем программу. Если переменная приняла значение "Саша", то в первом условии false и в результате на экран браузера ничего выведено не будет, хотя по расположению оператора else кажется, что он относится именно к первому оператору if. Если значение переменной станет "Таня", то первое и второе условия станут true, и в результате выполниться строка:

echo "Вам придется зарегистрироваться!";

Все так и должно быть, но вот если значение нашей переменной станет, например, равной "Игорь", тут возникнут большие проблемы. Второе выражение в операторе условия примет значение false, и программа перейдет кстроке:

echo "Вы уже зарегистрированы у нас!".

Хотя пользователь под этим именем не зарегистрирован. Дело в том, что РНР ставит оператор else (или else if) в соответствие последнему непарному оператору if. Поэтому последний оператор else относится ко второму оператору if, несмотря на то что, судя по отступам, имелось в виду совершенно другое. В такой ситуации выручают

<?

if ($name != "Саша")

{

    if ($name == "Таня")

        echo "Вам придется зарегистрироваться!";

}

else {

    echo "Вы уже зарегистрированы у нас!";

}

<< Предыдущий параграф Следующий параграф >>
Оглавление