Что вам потребуется для освоения примеров этой главы?
Первая попытка
Первая красивая картинка
Обработка переменных окружения
РНР как язык программирования
Взаимодействие с формами ввода
Взаимодействие с СУБД
Но неужели в РНР все операции ограничиваются только выводом текста с помощью echo? Конечно же нет, иначе никакого смысла в его использовании не было
бы вообще! РНР — это мощный язык программирования с синтаксисом, заимствованным из Си, который содержит широкий набор функций и операторов. Например, мы можем модифицировать предыдущий пример таким образом, чтобы
выдать пользователю, работающему под управлением Linux, дополнительное приветствие:
<?php>
if(strstr($HTTP_USER_AGENT,"Linux"))
{echo "<р>Привет линуксоводам России".
"от пехапистов нечерноземья!"}
?>
Если вы имеете опыт работы с Си или Perl, то никаких сложностей в понимании
работы этого фрагмента у вас возникнуть не должно. Оператор if активизирует выполнение вычислительного блока, заключенного в фигурные скобки при
удовлетворении условия, которое ограничено круглыми скобками. Вся черная
работа выполняется функцией strstr(), которая возвращает true, если вторая
строка («Linux») содержится в первой, представляющей собой значение переменной $HTTP_USER_AGENT. Таким образом, сообщение будет выведено только
в том случае, если в идентификационной строке программы клиента упоминается Linux.
Но использовать echo на практике не слишком удобно. Разработчики РНР учли этот момент и создали механизм, который позволяет вам входить и выходить из блоков РНР практически в любой момент:
<?рhр
if(strstr($HTTP_USER_AGENT,"MSIE"))
{
?>
Вы зачем-то используете Internet Explorer :-(
} else {
?>
<center><b>Bы правильно сделали, что отказались
от Internet Explorer</b></center>
<?
}
?>
Результат выполнения этой программы приведен на рис. 2.5.
Рис 2.5. Определение типа клиентской программы
Расцвет web-технологий начался после того, как программистские массы осознали
огромные возможности, которые скрывались за скромными, на первый взгляд,
формами ввода, входящими в состав CGI. Несомненно, что в РНР вопросу взаимодействия с пользователями также было уделено достаточно много внимания.
внимание
Основная концепция, положенная в основу обработки форм в РНР, состоит в том, что
любой элемент формы автоматически преобразуется в переменную с тем же именем,
что и имя элемента на соответствующей странице.
Вот как это взаимодействие выглядит на практике. Пусть в нашем распоряжении
имеется страничка с небольшой формой ввода:
<form action="processing.php" method="post">
<br>Ваше имя: <input type="text" name="name">
<br>Ваш адрес электронной почты: <input type="text" name="email.">
<br>
<input type="submit">
<br>
</form>
Очевидно, что ничего загадочного в этой форме нет — это обычный код HTML без
каких-либо «примесей». После того как пользователь заполняет поля формы и нажимает кнопку отправки данных, сервер вызывает для обработки формы программу processing, php.
примечание
В отличие от CGI-программ сервер полагает, что этот файл находится в том же каталоге,
что и сама форма.
Эта программа обработчика формы может выглядеть, например, следующим образом:
Уважаемый <b>
<?php
echo $name;
?></b> ! <br>
Вы подписаны на список рассылки
&quоt ;Новости тараканьего бизнеса.&quоt;<br>
Новости будут доставляться по адресу <i>
<?php echo $email; ?>
</i>
Это полный текст программы обработки — в отличие от CGI и Perl вам совершенно не нужно формировать никакие префиксы HTML. He верите — взгляните на
рис. 2.6.
Рис. 2.6. Обработчик формы успешно обходится без префиксов
Теперь можно подойти к наиболее сложному из примеров этой главы — написанию интерфейса к серверу базы данных. В качестве примера мы используем сервер PostgreSQL, который, по моему мнению, является оптимальным для построения проектов средней и высокой степени сложности. Однако вы можете достаточно
легко «подогнать» приводимые в этом разделе программы под ту СУБД, с которой
работаете.
В этом примере нам потребуется создать страницу, которая будет отрабатывать
один-единственный «статический» запрос: вывод всего содержимого определенной таблицы. Мы будем работать с простейшей таблицей — базой данных телефонного справочника, в которой будут содержаться коды городов автоматической
междугородной связи. Эта таблица может быть создана с помощью:
CREATE TABLE GORODA(
ID SERIAL PRIMARY KEY, -- внутренний ключ для ссылок
GOROD TEXT, -- название населенного пункта
KOD TEXT -- код междугородной связи
);
-- Несколько начальных записей
INSERT INTO GORODA (GOROD,KOD) VALUES ('Москва','095');
INSERT INTO GORODA (GOROD,KOD) VALUES ('Санкт-Петербург',' 812 ');
INSERT INTO GORODA (GOROD,KOD) VALUES ('Киев','044');
GRANT SELECT on GORODA to nobody; -- чтобы Apache имел право доступа
Для того чтобы создать соответствующую базу данных, нам потребуется поместить приведенный выше SQL-запрос в файл, например phone.sql, а затем из пользо-
вательского счета администратора PostgreSQL ввести следующие команды:
createdb phone
psql -f phone.sql phone
В результате будет создана база данных phone, в ней будет определена таблица
GORODA, а уже в ней будут созданы три записи.
совет
Если вы что-то напортачили и СУБД отказывается повторно вводить таблицу, вы можете
просто стереть базу данных с помощью команды dropdb.
Теперь можно приступать к созданию программы. Ее код приведен в листинге 2.1.
Листинг 2.1. Программа выводит телефонные коды городов
<HTML>
<BODY>
<h2 align=center>
Список кодов автоматической междугородной связи</h2>
<? рhр
# Вначале подключаемся к серверу базы данных
$database = pg_Connect("","","","","phone");
if (!$database)
{
echo "Подключиться к серверу не удалось!";
exit;
# Теперь формируем и выполняем запрос
$result = pg_Exec ($database,
"select gorod.kod from goroda");
# фиксируем количество строк, возвращенных в
# результате выполнения запроса
$num_recs = pg_NumRows($result);
if ($num_recs > 0)
{
?>
<TABLE BОRDЕR=1>
<TR><TH>Haимeнование населенного пункта</ТН><ТН>Код</ТН>
</TR>
<?
for ($i = 0; $i < $num_recs; $i++)
{
$current_city = pg_Result($result,$i,0); # Первое поле
$current_kod = pg_Result($result,$i,1); # и второе
echo "<TR><TD>$current_city</TD><TD>$current_kod</TD></TR>";
}
?>
</TABLE>
<?
} else {
echo "Список, к сожалению, пуст!";
}
# конец программы
?>
<HR>
<CENTER>Teлeфoнный справочник &quоt;PHPhone 1.0&quоt;
</CENTER>
</BODY>
</HTML>
В результате обращения к этой странице мы получим таблицу, приведенную на рис. 2.7.
Рис. 2.7. Генерация страницы по запросу к серверу PostgreSQL
2.8. Подводя итоги
Итак, в этой главе мы разобрались с тем, как перестать волноваться и начать использовать РНР в своей повседневной деятельности. Вы теперь знаете, как интегрировать РНР в свои HTML-страницы и как использовать основные возможности РНР для генерации кода и для обработки форм ввода. Теперь вы можете
переходить непосредственно к изучению языка.
|