PHP-4 Эффективная работа


Что вам потребуется для освоения примеров этой главы?
Первая попытка
Первая красивая картинка
Обработка переменных окружения
РНР как язык программирования
Взаимодействие с формами ввода
Взаимодействие с СУБД

2.5. РНР как язык программирования

Но неужели в РНР все операции ограничиваются только выводом текста с помощью 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. Определение типа клиентской программы

2.6. Взаимодействие с формами ввода

Расцвет 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. Обработчик формы успешно обходится без префиксов

2.7. Взаимодействие с СУБД

Теперь можно подойти к наиболее сложному из примеров этой главы — написанию интерфейса к серверу базы данных. В качестве примера мы используем сервер 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-страницы и как использовать основные возможности РНР для генерации кода и для обработки форм ввода. Теперь вы можете переходить непосредственно к изучению языка.

назад
далее

Сайт управляется системой uCoz