Июнь 2010

Самоучитель по креативному веб-дизайну. Книга 3, стр.115



HTML & Web Design Tips & Techniques





// Создать строковую переменную —

$author name = «Konrad King»;

// Создать целочисленную переменную

$family member_count = 3;

// Создать массив

$pets_names[0] = «Samantha»;

$pets_names [1] = «Caesar»;

$pets_names [2] = «Floppy»;

// Создать переменную для хранения значения с плавающий точкой

// (т. е. вещественную переменную или переменную двойной точности)

$years in_Nevada = 7.5;

// Вывести все переменные на Web-страницу

echo «$author narne, автор множества книг по компьютерной инженерии, «;

echo «проживаем в штате Невада на протяжении $years_in Nevada лет.»;

echo «

Его семья насчитывает $family_member_count человек, «;

echo «а кроме того, троих животных с кличками: «;

echo «$pets names [0] , $pets names [1] и $pets names [2] » ;

?>

Самоучитель по креативному веб-дизайну. Книга 3, стр.116

Глава 10. РНР4 50 3







Условная и циклическая обработка

PHP-сценарий представляет собой последовательность инструкций, которые должен выполнить PHP-процессор для выполнения определенной задачи. Все простые сценарии, рассмотренные до сих пор в этой главе, выполнялись процес — сором от первого оператора до последнего в строгом порядке. С усложнением сценариев возникает необходимость в выполнении одного набора операторов, если определенное условие соблюдается и, возможно, другого набора в против —

50 4 Глава 10. РНР4





ном случае. Другими словами, возникает необходимость, чтобы процессор при — нимал решения и действовал в соответствии с принятыми решениями. При на — писании сценариев для принятия процессором решений, вы реализуете условную обработку. Другими словами, на основании одного или нескольких условий про — цессор будет выполнять определенные операторы.

Для принятия решений сценарии должны выполнять проверку определенного рода. Например, один сценарий может проверять правильность введенного посетителем пароля, а второй — верное ли количество цифр ввел посетитель в номере телефона. Для выполнения таких проверок сценарий будет использовать приведенные выше операции сравнения. Операции сравнения позволяют опреде- лить, каким образом одно значение соотносится с другим. Другими словами, с помощью операций сравнения PHP-процессор проверяет равно, больше или меньше одно значение другого. При выполнении процессором операций сравне- ния для сравнения двух значений результат выражается значениями tru e и

Самоучитель по креативному веб-дизайну. Книга 3, стр.117

false, Т. е. Значения соответствуют (true) ИЛИ Не соответствуют (false).

Тесно связана с процессом принятия решений в сценарии и возможность по — вторения выполнения одного или нескольких операторов определенное количе — ство раз или до возникновения известного состояния. Оператор while позволяет организовать цикл, выполняемый процессором до тех пор, пока определенное условие соблюдается. Оператор for дает возможность организовать цикл, в кото- ром PHP-процессор выполняет набор операторов определенное число раз.



Использование оператора if для проверки условия

Оператор if позволяет использовать операции сравнения РНР для указания PHP-процессору на необходимость проверки условия, а затем выполнения опера — торов, основываясь на результатах проверки. Если проверка дает true, процессор будет выполнять операторы, находящиеся после if. В противном случае, если проверка дает false, процессор пропускает операторы после if. Формат опера —

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



if (условие)

оператор;



Обратите внимание, что в конце строки if (условие), с которой начинается оператор if, точка с запятой (;) не ставится, поскольку оператор продолжается

на следующей строке.

При использовании оператора if для условной обработки в некоторых случа —

ях при соблюдении условия выполнятся только один оператор; в других же ситу — ациях выполняемых в случае соблюдения условия операторов может быть не —

сколько. Когда сценарий указывает процессору ВЫПОЛНИТЕ ТОЛЬКО ОДИН оператор, следующий за if, используется простой оператор:



if ($state == «са»)

echo «Был введен код штата Калифорния.»;

Чтобы процессор при соблюдении условия выполнял несколько операторов, их необходимо сгруппировать с помощью фигурных скобок ({}). Операторы, заключен —

ные в скобки, называются составным оператором, пример которого показан ниже:



Глава10.РНР4 505





if ($username!= «Konrad»)

{

header(«Location: http://NVBizNet. com/htmlwdtt/InvalidUser. htm»);

exit





ПРИМЕЧАНИЕ Запоминание терминов «простой оператор» и «составной оператор» не

является обязательным, тем не менее, важно знать, что связанная группа операторов долж — на заключаться в фигурные скобки ({}) .



В двух предыдущих примерах процессор использует операторы if для опреде — ления необходимости выполнения одного или нескольких операторов. В первом примере, если условие соблюдается, процессор помещает на Web-страницу текст. Аналогично, во втором примере, если условие соблюдается, т. е. значение пере —

Самоучитель по креативному веб-дизайну. Книга 3, стр.118

менной $usemame не равно «Konrad», процессор перенаправляет Web-браузер на новую Web-страницу. В обоих примерах, если условие не соблюдается, процессор

пропускает (т. е. не выполняет) операторы, содержащиеся в блоке if. Тем не ме — нее, в большинстве случаев требуется, чтобы при соблюдении условия выполнял —

ся один блок операторов, а при несоблюдении — другой блок. Операторы, кото — рые должны выполнятся в случае, когда условие не соблюдается, указываются в сценарии в блоке else. Формат оператора els e выглядит следующим образом:



if (условие)

оператор;

else

оператор;

В следующем сценарии оператор if-eis e используется для проверки значе —

ния переменной $username. Если значение равно «Konrad», сценарий перенап —

равляет посетителя на страницу weicome. htm, в противном случае будет открыта

страница InvalidUser. htm:



if ($username!= «Konrad»)

{

header(«Location: Weicome. htm») ;

exi t

}

else

{

header(«Location: http://NVBizNet. com/htmlwdtt/InvalidUser. htm»);

exit

}

Помимо применения оператора if-eis e для выполнения одного набора опе- раторов при соблюдении условия и другого набора при несоблюдении условия в некоторых случаях возникает необходимость проверки нескольких связанных ус — ловий или же многократной проверки одного и того же условия. Например, предположим, что сценарий должен определять междугородний телефонный код посетителя путем сравнения значения переменной $cit y с несколькими города — ми, телефонные коды которых сценарию известны. Следующий оператор ис — пользует последовательные операторы if-eis e для иллюстрации упрощенного примера выполняемой процессором обработки:

50 6 Глава 10. РНР4





if ($city == «New York»)

$areaCode = 212;

elseif ($city == «Houston»)

$areaCode = 281;

elseif ($city == «Phoenix»)

$areaCode = 602;

elseif ($city == «Seattle»)

$areaCode = 206;

else

$areaCode = «**UNKNOWN**»;

При выполнении PHP-процессором приведенного выше оператора if сначала сценарий проверяет, является ли город посетителя Нью-Йорком (New York). В случае положительного результата сравнения переменной $areaCode присваива — ется значение 212. Если посетитель живет не в Нью-Йорке, процессор выполня —

ет следующий оператор if-eis e и определяет, является ли местом жительства

посетителя Хыбстон (Houston). Подобная обработка будет проводиться до тех пор, пока PHP-процессор не определит город или дойдет до последнего опера — тора else. Если соответствие для города посетителя найдено не будет, перемен —

Самоучитель по креативному веб-дизайну. Книга 3, стр.119

ной $areacode будет присвоено значение «**UNKNOWN**» (то есть, «НЕИЗВЕСТ — НЫЙ»).

Приведенная в предыдущем примере структура оператора if применяется для выполнения оператора (или группы операторов) при проверке на неравенство (значение переменной меньше, больше или не равно другому значению) или при необходимости проверки значений нескольких связанных между собой пере- менных. Для проверки значения одной переменной на равенство числу или

строке РНР предоставляет более подходящий для этой цели оператор switch. Например, следующий оператор switch более очевиден и элегантен, нежели операторы if и elsei f из предыдущего примера:



switch ($city)

{

case «New York» :

$areaCode • 212;

break;

case «Houston»:

$areaCode = 281;

break;

case «Phoenix»:

$areaCode = 602 ;

break;

case «Seattle»:

$areaCode = 206;

break;

default:

$areaCode = «**UNKNOWN**»;

}

При выполнении оператора switch процессор сравнивает значение выраже — ния, следующего после ключевого слова switch с каждым из значений, находя — щихся после ключевых слов case. Если ни одно из значений, указанных после

Глава 10. РНР4 50 7





case, не совпадает со значением выражения после switch, процессор будет вы — полнять операторы, соответствующие оператору default.

Оператор break в предыдущем примере важен по той причине, что он указы- вает PHP-процессору прекратить выполнение операторов case и перейти к вы- полнению оператора, находящегося непосредственно после switch. Например,

если бы в операторе case «Houston» был пропущен оператор break, перемен — ная $areaCode сначала получила бы значение 281, а затем сравнение бы продол — жалось, и ей было бы присвоено значение 602 .

Тем не менее, в некоторых случаях оператор break может опускаться специ — ально. Предположим, например, что одни и те же операторы должны выпол — няться для нескольких операторов case, как в случае с первыми тремя операто — рами case в следующем примере:

Самоучитель по креативному веб-дизайну. Книга 3, стр.120



switch ($city)

{ ‘ • . ‘

case «Henderson»:

case «Las Vegas»:

case «Pahrump»:

$areaCode = 702;

break;

case «New York» :

$areaCode = 212;

break;

case «Houston»:

$areaCode = 281;

break;

case «Phoenix»:

$areaCode = 602;

break;

case «Seattle»:

$areaCode = 206;

break;

default:

$areaCode • «**UNKNOWN**»;

}

Поскольку Хендерсон (Henderson), Лас-Вегас (Las Vegas) и Пахрамп (Pahrump) имеют один и тот же телефонный код (702), необходимо, чтобы РНР-процессор выполнил оператор присваивания-$areaCode = 702 для каждого из этих трех городов.

Использование логических операторов для проверки одного или нескольких условий

С усложнением сценариев вы сталкиваетесь с ситуациями, когда процессор должен одновременно выполнять несколько сравнений. Например, сценарий мо — жет проверять, находится ли годовой доход посетителя в пределах от $25 000 до

$75 000, либо же определять, имеет ли посетитель хорошую кредитную историю или производит покупку впервые. Для выполнения действий подобного рода

применяются логические И языка РНР (&& или and), а также ИЛИ

50 8 Глава 10. РНР4





(I | или or). При использовании в сценарии операций И и ИЛИ для проверки

нескольких условий, условия помещаются в круглые скобки, как показано на

примере следующего оператора if, использующего логическую операцию ИЛИ для проверки того, является ли посетитель постоянным клиентом ли производит покупку впервые:



if (($hasGoodCredit) j | ($firstTimeHomeBuyer))

оператор;



Аналогично, в следующем примере логическая операция И используется для определения того, находится ли годовой доход посетителя в диапазоне между

$25 000 и $75 000:



if (($income >=25000) && ($income

оператор;



При использовании в сценарии логической операции И, чтобы результат вы — ражения был равен true, все входящие в него выражения должны быть равны true. Если хотя бы одно из условий не соблюдается, результатом всего выраже — ния будет false. Например, если годовой доход посетителя меньше $25 000, ус — ловие в предыдущем операторе if даст в результате false. Аналогично, если до —

ход посетителя больше $75 000, результат также будет равен false. Чтобы условие соблюдалось, годовой доход посетителя должен быть не менее $25 000 и

не более $75 000.

Чтобы выражение с логической операцией ИЛИ давало в результате true, в выражении должно, соблюдаться хотя бы одно условие. Например, если посети- тель имеет хорошую кредитную историю, условие в первом примере будет со — блюдаться. Если посетитель покупает дом впервые, условие также соблюдается. Более того, условие будет соблюдаться и в случае, если посетитель имеет хоро- шую кредитную историю и покупает дом впервые. Единственным случаем, когда составное условие соблюдаться не будет, является ситуация, когда оба условия не соблюдаются.

Самоучитель по креативному веб-дизайну. Книга 3, стр.121



Использование оператора for для повторения операторов заданное количество раз

Одной из наиболее часто встречаемых операций является повторение одного

или нескольких операторов определенное количество раз. В этом случае приме — няется оператор for. Оператор for в языке РНР содержит три выражения и про- стой или составной оператор. Этот оператор обладает следующим синтаксисом:



for (выражение!, выражение2, выражениеЗ) оператор;



PHP-процессор вычисляет значение первого выражения (выражение1) один раз перед началом выполнения цикла. В начале каждой итерации вычисляется значение второго выражения (выражение2). Если значение второго выражения равно true, PHP-процессор выполняет оператор или группу операторов, находя — щихся между фигурными скобками, как в следующем примере:



Глава10.РНР4 509





for (выражение!, выражение2, выражение3)

{

оператор;

оператор;



оператор;

}



Если же значение второго выражения будет равно false, PHP-процессор за — вершит выполнение цикла for. В конце каждой итерации вычисляется значение

выражения выражениеЗ.

В цикле for можно использовать любые выражения языка РНР, причем лю —

бое из трех выражений может быть пустым. Тем не менее, если пустым является второе выражение (выражение2 в приведенном выше синтаксисе), РНР-процессор будет выполнять цикл бесконечно. Таким образом, следующий цикл for с пус —

Самоучитель по креативному веб-дизайну. Книга 3, стр.122

тыми вторым и третьим выражениями будет выполняться до тех пор, пока условный

оператор break в теле цикла (if $count = ю) не приведет к тому, что выполне — ние сценария продолжится с первого оператора, находящегося после цикла for:

for ($count = 1; ;)

{

echo «Count = $count

«;

if ($count ==10) break;

++$count;

}

Рассмотрим еще один пример. Следующий оператор for (с тремя непустыми выражениями) выводит на экран первые десять значений, хранящихся в массиве

$stateNames:



for ($statelndex = 0; $statelndex

echo «\$stateNames[$statelndex] = $stateNames[$statelndex]

«;



Третье выражение увеличивает значение переменной $stateinde x после вы — полнения очередной итерации цикла for. Пока значение второго выражения

($stateinde x РНР-процессор будет выполнять блок операто- ров цикла for. В приведенном примере это единственный оператор echo.

Использование цикла while для повторения выполнения операторов

в случае соблюдения условия



В предыдущем разделе говорилось, что циклы for в языке РНР используются для повторения одного или нескольких операторов определенное количество раз. Для ситуаций, в которых РНР-процессор должен выполнять операторы до тех пор, пока некоторое условие соблюдается, но не обязательно определенное ко —

личество раз, МОЖНО ИСПОЛЬЗОВатЬ ЦИКЛ while. Формат ЦИКЛа while ВЫГЛЯДИТ

следующим образом:



while ($условие)

{

оператор;

оператор;

}

51 0

Глава 10. РНР4





При выполнении цикла while процессор сначала проверяет условие (содер — жащееся в скобках после ключевого слова while). Если условие соблюдается, бу- дут выполняться операторы в блоке цикла while (т. е. операторы, находящиеся в фигурных скобках ({}) после ключевого слова while). После выполнения после — днего оператора цикла процессор снова проверяет условие. Если оно соблюдает — ся, блок операторов выполняется снова, после чего снова проверяется условие и т. д. Когда, в конце концов, условие даст false, процессор продолжит выполнение сценария с оператора, который находится непосредственно после цикла while.

Самоучитель по креативному веб-дизайну. Книга 3, стр.123

Цикл do-while аналогичен циклу while. Он также заставляет процессор вы — полнять операторы при соблюдении условия, но вместо проверки условия перед выполнением операторов (как в случае с циклом while), цикл do-while прове- ряет условие после выполнения операторов. Формат цикла do-while выглядит следующим образом:



do

{

оператор;

оператор;

}

while ($условие);

Поскольку процессор проверяет условие после выполнения операторов тела цикла, они будут выполнены по крайней мене один раз, даже если при первой проверке условие соблюдаться не будет.



Передача данных HTML-формы РНР-сценарию

Если бы язык РНР не давал возможности получать информацию от посетите —

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

и количество посетителей, не наделяет Web-страницу особенными динамическим свойствами, которые интересуют посетителей сайта. Конечно, значения перечислен —

ных выше параметров будет меняться, тем не менее, все содержимое Web-страницы, т. е. информация, ради которой посетитель открыл страницу, остается статическим, если вы не дадите посетителю средства, которые позволят ему указать Web-серверу, что он желает увидеть. HTML-формы дают возможность посетителю передавать ин — формацию Web-серверу, а PHP-сценарии обрабатывают полученную (от посетителя)

информацию и на ее основе создают содержимое новой Web-страницы.

Как вы уже знаете из главы 3, после заполнения текстовых полей формы, ус — тановки необходимых переключателей и флажков и нажатия кнопки передачи (Submit) Web-браузер передает результаты заполнения формы Web-серверу. Тем не

менее, Web-сервер «не понимает» данных, переданных ему браузером. Как ре — зультат, сервер должен передать данные (т. е. результаты формы) на обработку другой программой. В прошлом Web-браузеры передавали результаты форм для обработки Perl-сценариям. В настоящее время Web-серверы передают результаты форм не только Perl-сценариям, но и Servlet-сценариям, реализованным на Java

Самоучитель по креативному веб-дизайну. Книга 3, стр.124

(так называемым «сервлетам»), сценариям Active Server Pages (ASP) и, как вы уз — наете из этого практикума, РНР-сценариям.

Глава 10. РНР4 511





Когда вы рассматривали формы (в главе 3), вы изучили различные атрибуты,

которые могут использоваться в дескрипторе

. Для взаимодействия ре —

зультатов. заполнения форм с PHP-сценариями важны два атрибута — actio n и method. Установив значение атрибута actio n в дескрипторе
равным URL — адресу PHP-сценария, вы заставляете Web-сервер передать результаты формы (от — правленные серверу Web-браузером после нажатия посетителем кнопки Submit) PHP-сценарию. Атрибут method устанавливает для Web-браузера способ передачи Web-серверу результатов заполнения формы.

Предположим, например, что имеется Web-страница со следующим определе — нием формы:

ChptlOTipOl. php»

method=»GETM>

Имя:


Фамилия:


E-Mail:








После нажатия посетителем кнопки «Отправить» Web-браузер отправит Web — серверу результаты формы с помощью метода GET. Метод GET говорит Web-бра — узеру присоединить пары имя/значение (т. е., результаты заполнения формы) в конец URL-адреса, по которому Web-сервер передает данные формы (в приведен- ном Примере ЭТО http://www. NVBizNet. com/HWDTT/Chptl0Tip01.php), как ЭТО можно видеть на рис. 10.6 в адресной строке Web-браузера.

В приведенном npnMepeWeb-браузер передает пары имя/значение

«firsName=Konrad», «lastName=King» И «emailAddr=kki@NVBizNet. com».

Часть имени пары имя/значение взята из атрибута name определения эле — мента формы, а часть значения представляет собой данные, введенные в фор — му самим посетителем. Таким образом, в приведенном примере для получе —

ния результата, показанного на рис. 10.6, посетитель ввел «Konrad» в

элементе С именем firstName, «King» — В Элементе С именем lastName И

«kki@NVBizNet. com» — В Элементе С именем emailAddr.



51 2 Глава 10. РНР4





Изучив адресное поле Web-браузера на рис. 10.6, можно увидеть, что метод

GET привел к тому, что браузер отформатировал результаты формы в виде URL — адреса;



http://www. NVBizNet. com/HWDTT/

ChptlOTipOl. php? first^ame=Konrad&las^ame=King&emailAddr=kki(3NVBizNet. com



В адресной отроке содержатся адрес, указанный в атрибуте actio n дескрипто — ра

, знак вопроса (?) и три пары имя/значения:



firstName—Konrad

lastName=King

emailAddr=kki@NVBizNet. com

Пары имя/значения разделены амперсантами (&).

Одним из недостатков использования метода GET является слишком откры — тая передача результатов формы — посетитель имеет возможность просмотреть все результаты в адресной строке Web-браузера. Более того, результаты формы, передаваемые в виде части URL-адреса, фиксируются в журнале браузера, в жур- нальных файлах Web-сервера и в кэш-памяти прокси-сервера (если он использу —



Полезные ссылки
Случайные записи
  • 12.06.2010">Самоучитель по креативному веб-дизайну. Книга 4, стр.111
  • 20.07.2012">YouTube представил инструмент для размытия лиц
  • 13.06.2010">Самоучитель по креативному веб-дизайну. Книга 4, стр.92
  • 11.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.11
  • 24.02.2011">Руководство по actionscript. часть 7, стр. 010
  • 08.03.2011">Руководство по actionscript. часть 4, стр. 076
  • 10.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.60
  • 28.08.2011">Занимайся спортом стар и млад!
  • 06.03.2011">Руководство по actionscript. часть 4, стр. 137
  • 10.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.87
  • 07.03.2011">Руководство по actionscript. часть 4, стр. 122
  • 11.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.9
  • 12.03.2011">Руководство по actionscript. часть 3, стр. 141
  • 09.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.150
  • 22.03.2011">Руководство по actionscript. часть 2, стр. 028
Опрос

Какие цвета вы предпочитаете?

View Results

Loading ... Loading ...