Назад | Начало урока | Вперед
Содержание

Глава 23

Сценарии сайта

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

// Автозагрузка класса
function __autoload($class) {

// Подключение файла с именем "class_имя_класса.php"
include("class_" . $class . ".php");
}

Кроме того, выводятся рисунки сверху и снизу страницы с помощью методов класса hat_foot.

Домашняя страница сайта

На этой странице надо показать список самых дешевых предложений по странам,
а так же предложить выбрать страну и город, для которых будут отображены описания туров.

Подсказка

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

Листинг 23.1 index.php - домашняя страница приложения


<?php
// Открытие сессии
session_start();
@$strana = $_GET['format'];

// Автозагрузка класса
function __autoload($class) {

// Подключение файла с именем "class_имя_класса.php"
include("class_" . $class . ".php");
}
//создадим шапку страницы
$page= new hat_foot;
$page->hat();

//создадим объект типа baza и получим список стран
$db = new baza();
$spisok =$db->show_country_list();

//Вывод самых дешевых предложений по странам
echo "Наши предложения :<br />";
//--------------------------------------------
echo "<table border=0>";
for($i=0;$i<count($spisok);$i++) {

echo '<tr><td bgcolor="#CCFF99">';
echo $spisok[$i]."<br>";
echo'</td><td bgcolor="#CCFF99">';
$starna=new country($spisok[$i]);
echo "с ".$starna->min_off()."<br>";
echo "</td></tr>";
}

//-------------------------------------------------
echo "<table border=0><tr><td colspan=2>

Для просмотра предложений выберите страну и город</td></tr><tr><td>";

// Создание формы для выбора страны с передачей данных в этот же скрипт
echo '<form><select name="format" size="1">';
for($i=0;$i<count($spisok);$i++) {

// Создание элемента формы для вывода списка стран
if($spisok[$i]== $strana ) {
echo '<option selected "value="'.$spisok[$i].'">'. $spisok[$i];
}
else {
echo '<option "value="'.$spisok[$i].'">'. $spisok[$i];
}
}
echo '</select><input type="submit" value="OK"></form>';
echo "</td><td>";
//----------------------------------------------

// Получение имени страны из вышеописанной формы
@$country = $_GET['format'];
// регистрация переменной сессии - country
$_SESSION['strana'] = $country;

// Если страна выбрана, печатаем список городов в данной стране
if ($country!='') {

echo '<form action="select_tour.php"><select name="format2" size="1">';
// Создание элемента формы для вывода списка городов
$starna= new country($country);
$goroda=$starna->show_city_list();
for($i=0;$i<count($goroda);$i++) {
echo '<option value="'.$goroda[$i].'">'. $goroda[$i];
}
echo '</select><input type="submit" value="OK"></form>';
}
echo "</td></tr></table>";
$page->footer();
$db->connect_close();
?>

Анализ

Приведенный сценарий содержит две формы, причем данные из обеих передаются обратно
в вызывающий сценарий. Поэтому часть данных, например название выбранной страны
удобнее хранить в сессии.

// Получение имени страны из вышеописанной формы
@$country = $_GET['format'];
// регистрация переменной сессии - country
$_SESSION['strana'] = $country;

Здесь имя страны получено из формы, и передано на хранение в переменную сессии,
так как оно будет использоваться не только на этой странице, но и н а на другой странице

(АВ: Интересно, что вторая форма появляется на странице после того, как пользователь нажмет
на кнопку для выбора страны. страница изменится так, что появится форма и кнопка для
выбора городов. Скрипт работает так потому, что срабатывает условие: if($country!='').
Пока не выбрана страна, эта ветка сценария не выполняется.)

То, на какую именно страницу попадет пользователь нажав на кнопку выбора городов,
определяется тегом <form action="select_tour.php"> формы.

Выбор страны передается через переменную сессии:

// Получение имени страны из вышеописанной формы
@$country = $_GET['format'];
// регистрация переменной сессии - country
$_SESSION['strana'] = $country;

а выбор города передается через ...?
Полагаю, что имя города передается через переменную format2

< form action="select_tour.php"><select name="format2" size="1">

Так как в начале страницы select_tour.php есть следующий код:

session_start();
$city = $_GET['format2'];
$country=$_SESSION['strana'];
$_SESSION['strana']= $country;
$_SESSION['gorod']= $city;

Здесь название страны в эту страницу передано через переменную сессии, а название
города - через переменную формы format2. И далее подготовлены уже две переменные
сессии - имя страны и имя города. А локальные переменные $city и $country используются
на этой странице для хранения имени города и страны.

Далее проанализируем как работают функции этого сценария.

function show_country_list() {

$quest="SELECT name FROM countries";
if ($result = $this->connection->query ($quest)) {
while ($row = $result->fetch_assoc() ) {
$spisok[] = $row['name'];
}
$result->close();
return $spisok;
}
}

Эта функция возвращает список стран.
Далее функция min_off()

function min_off() {

$request = "SELECT MIN(t.dbl) as min_dbl ".
"FROM cities as c, hotels as h, tours as t ".
"WHERE t.hotel = h.id AND c.id = h.city ".
"AND c.country=\"$this->name\"";

if ($result = $this->connection->query ($request)) {

$row = $result->fetch_assoc();
return $row['min_dbl'];
}
}

Эта функция вычисляет минимальное значение в колонке dbl для определенной страны
и возвращает это значение, предварительно сохранив его в переменной 'min_dbl'.

Таким образом эти две функции работают так, что в цикле организован перебор стран
из возвращенного первой функцией списка стран, и в каждой итерации происходит выбор
самого дешевого предложения для данной страны. Результаты выводятся в виде html-таблицы.

Далее полученный ранее список стран используется для создания формы, для выбора
пользователем одной из стран.

Затем вызывается функция show_city_list(), которая возвращает список городов выбранной страны:

function show_city_list() {

$request="SELECT name FROM cities WHERE country=\"$this->name\"";
if ($result = $this->connection->query ($request)) {
while( $row = $result->fetch_assoc() ) {
$spisok[] = $row['name'];
}
$result->close();
return $spisok;
}
}

Теперь этот возвращенный список городов используется для создания формы для
выбора одного из городов пользователем.

Посмотрим index.htm - домашняя страница приложения


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0043)http://localhost/?format=%D0%EE%F1%F1%E8%FF -->
<HTML><HEAD><TITLE>Магазин путешествий</TITLE>
<META http-equiv=Content-Type content="text/html; charset=windows-1251">
<META content="MSHTML 6.00.2900.2523" name=GENERATOR></HEAD>
<BODY>
<DIV align=right><IMG height=50 src="index_php.files/title.gif"
width=300></DIV>Наши предложения :<BR>

<TABLE border=0>

<TBODY>
<TR>
<TD bgColor=#ccff99>Россия<BR></TD>
<TD bgColor=#ccff99>с 1200.00<BR></TD>
</TR>
<TR>
<TD bgColor=#ccff99>Франция<BR></TD>
<TD bgColor=#ccff99>с <BR></TD>
</TR>
</TBODY>
</TABLE>

<TABLE border=0>

<TBODY>
<TR>
<TD colSpan=2>Для просмотра предложений выберите страну и город</TD>
</TR>
<TR>
<TD>
<FORM>
<SELECT size=1 name=format>
<OPTION selected?value="Россия">Россия
<OPTION ?value="Франция">Франция</OPTION>
</SELECT>
<INPUT type=submit value=OK></FORM></TD>
<TD>
<FORM action=select_tour.php>
<SELECT size=1 name=format2>
<OPTION value=Москва selected>Москва
<OPTION value=Санкт_Петербург>Санкт_Петербург</OPTION>
</SELECT>
<INPUT type=submit value=OK></FORM></TD>
</TR>
</TBODY>
</TABLE>
<P> <IMG height=40 src="index_php.files/footer.gif" width=400></P></BODY></HTML>


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

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

Резюме:

Суть php-кода заключается в том, что программа руководствуясь сценарием связывается с БД,
посылает запросы, обрабатывает их, получает данные, к примеру список. Далее, оперируя этим
списком например при помощи цикла, прописанного в сценарии программа создает html-страницу.
И эта страница посылается на сервер.

Суть php-сценария в том, чтобы подготовить html-страницу. Это очень интересное и мощное
решение! html-средства, это средства определяющие то, в какой форме мы увидим результаты
работы скрипта.

Для примера посмотрим как программа получив список стран, формирует таблицу,
в которую выводит самые дешевые предложения:

echo "<table border=0>";
for($i=0;$i<count($spisok);$i++) {

echo '<tr><td bgcolor="#CCFF99">';
echo $spisok[$i]."<br>";
echo'</td><td bgcolor="#CCFF99">';
$starna=new country($spisok[$i]);
echo "с ".$starna->min_off()."<br>";
echo "</td></tr>";
}

На html-странице код таблицы будет таким:

<TABLE border=0>

<TBODY>
<TR>
<TD bgColor=#ccff99>Россия<BR></TD>
<TD bgColor=#ccff99>с 1200.00<BR></TD>
</TR>
<TR>
<TD bgColor=#ccff99>Франция<BR></TD>
<TD bgColor=#ccff99>с <BR></TD>
</TR>
</TBODY>
</TABLE>

Техника создания второй таблицы, в которой пользователь сможет выбрать страну и город
будет подобна вышеуказанной. В этой технике вся мощь php-скриптов!

Используя этот же полученный список стран, программа искусно выводит этот список во вторую
таблицу - в код формы, для выбора страны. (смотри готовую html-страницу). Затем программа
вызывает функцию show_city_list(), которая возвращает список городов, и используя этот список
программа искусно выводит его в форму для выбора городов.

Итак в этом скрипте вызывается три функции, которые посылают БД три запроса:

Функция show_country_list() посылает запрос для получения списка стран.
"SELECT name FROM countries"

Функция show_city_list() посылает запрос для получения списка городов выбранной страны
"SELECT name FROM cities WHERE country=\"$this->name\"";

Функция min_off() посылает запрос для получения минимальной стоимости тура Этот запрос составлен довольно изощренно:

"SELECT MIN(t.dbl) as min_dbl ".

"FROM cities as c, hotels as h, tours as t ".
"WHERE t.hotel = h.id AND c.id = h.city ".
"AND c.country=\"$this->name\""


Назад | Начало урока | Вверх | Вперед
Содержание

Hosted by uCoz