- •Язык php
- •Динамические сайты
- •Преимущества обработки страниц на стороне сервера
- •Современные технологии обработки страниц на стороне сервера
- •Active Server Pages (asp)
- •Java Servlets и jsp
- •Контрольные вопросы
- •Возможности языкаPhp ОбработкаHtmLформ
- •ГенерированиеHtmLстраниц
- •Взаимодействие с субд
- •Поддержка большого количества библиотек
- •Контрольные вопросы
- •Создание динамических страниц Создание простейшегоPhp-скрипта
- •Рнр и код, выполняемый на стороне клиента
- •Взаимодействие с пользователем
- •Контрольные вопросы
- •Синтаксис языкаPhp Типы данных
- •Константы
- •Объявление и инициализация переменных
- •Преобразование типов
- •Арифметические операторы
- •Унарный оператор
- •Оператор конкатенации строк
- •Сокращенная запись для присвоениязначений переменным
- •Операторы сравнения
- •Условные операторы
- •Функции пользователя
- •Массивы
- •Работа с файлами
- •Контрольные вопросы
- •Рнр иMySql Обработка и хранение структурированных данных
- •Динамические сайты, использующие базу данных
- •Построение реляционной базы данных
- •Продавцы
- •Заказчики
- •SqLзапросы к реляционной базе данных
- •Insert into salespeople values(1001,'Иванов','Москва',0.12);
- •Insert into customers values(2001,'Белкин','Москва',100,1001);
- •Insert into orders values(3008,4723.00,'2002-10-05',2006,1001);
- •Особенности реализацииMySql
- •ВзаимодействиеPhp иMySql
- •Контрольные вопросы
- •Разработка системы "Прайс-лист"
- •Постановка задачи
- •Принципы функционирования программного комплекса
- •Разработка структуры базы данных
- •Проектирование системы администрирования
- •Проектирование генератора прайс-листа
- •Контрольные вопросы
Проектирование генератора прайс-листа
Генератор должен формировть прайс-лист для выбранной группы товаров на основе информации, содержащейся в базе данных.
Предлагается реализовать интерфейс, содержащий вертикальное меню, каждый пункт которого является ссылкой на прайс-лист соответствующей группы товаров. Следует так же предусмотреть область для вывода названия группы товаров и таблицы прайс-листа.
На основе эскиза опишем шаблон интерфейса на языке HTML.
<html>
<head>
<title>Прайс-лист</title>
</head>
<body>
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
<td width="25%" valign="top">
<table width="100%" cellpadding="0" cellspacing="5">
<tr>
<td><b>Разделы</b></td>
</tr>
<? echo $menu; ?>
</table>
</td>
<td valign="top">
<table width="100%" cellpadding="0" cellspacing="5">
<tr>
<td colspan="3"><font size="5"><u><? echo $productname;?></u></font>
<br><br></td>
</tr>
<tr>
<td><b>Изделие</b></td>
<td><b>Цена USD</b></td>
<td><b>Цена РУБ</b></td>
</tr>
<? echo $list; ?>
</table>
</td>
</tr>
</table>
</body>
</html>
Данный шаблон представляет собой таблицу с двумя ячейками. В левую ячейку вложена таблица, содержащая пункты меню. В правой ячейке отображается название группы товаров и прайс-лист.
Создадим файл pricelist.php, в котором будет храниться представленный выше шаблон, а так же код программы, написанной на языкеPHP.
В шаблон подставляются значения переменных $menu(меню, сформированное на основе групп товаров, зарегистрированных в базе данных), $productname(название текущей группы товаров) и $list(прайс-лист текущей группы товаров). Рассмотрим блок инструкций на языкеPHP, формирующий значения перечисленных выше переменных.
<?
$menu='';
$list='';
$minpid=0;
$productname='';
$fp=fopen("usd","r");
$rubl=fgets($fp);
fclose($fp);
mysql_connect("localhost","","");
mysql_select_db("mybase");
$q=mysql_query("select * from products order by pid");
$firstproduct=1;
while($r=mysql_fetch_array($q)) {
if ($firstproduct) {
$minpid=$r["pid"];
$firstproduct=0;
}
$menu.='<tr><td><a href="pricelist.php?pid='.$r["pid"].'">'.$r["description"].'</a></td></tr>';
}
if (!isset($pid)) $pid=$minpid;
$q=mysql_query("select description from products where pid=$pid");
if (mysql_num_rows($q)>0) {
$r=mysql_fetch_array($q);
$productname=$r["description"];
}
$q=mysql_query("select * from models where pid=$pid");
while($r=mysql_fetch_array($q))
$list.='<tr><td>'.$r["firm"].' '.$r["model"].'</td><td>'.$r["price"].'</td><td>'.$r["price"]*$rubl.'</td></tr>';
?>
Сразу после запуска скрипт инициализирует начальные значения переменных $menu, $list, $minpid, $productname . Далее из файла usdсчитывается значение переменной $rubl, после чего устанавливается соединение с ервером баз данных и выбирается активная (текущая) база данных.
На следующем этапе формируется меню. Скрипт посылает запрос на выборку всех разделов из базы данных. Первое значение идентификатора раздела из результирующего набора запоминается в переменной $minpid(оно может пригодиться в дальнейшем). Каждый элемент меню помещается в отдельную ячейку таблицы и представляет собой ссылку на скриптpricelist.phpс параметромpid, значение которого равно идентификатору соответствующего раздела (группы товаров) из базы данных.
После того, как меню сформировано, система проверяет, инициализировано ли значение переменной $pid(при первом запуске скрипта значение переменная не инициализирована). Если переменная $pidна момент проверки не имеет значения (т.е. не создана), ей присваивается значение переменной $minpid. Переменная $pidсодержит идентификатор текущего раздела (группы товаров).
Далее скрипт запрашивает у базы данных название текущего раздела и инициализирует и присваивает его переменной $productname. Проверка наличия раздела в базе данных осуществляется для того, чтобы избежать ошибок (в случае, если в базе данных отсутствуют разделы, значение $pid=0 и имя раздела $productnameсохраняет начальное значение "пустая строка").
На последнем этапе работы генератор посылает базе данных запрос на выборку всех наименований (изделий), принадлежащих текущему разделу (группе товаров). Полученные данные форматируются в виде таблицы, каждая запись которой состоит из следующих полей: изделие (информация о фирме-производителе и модели изделия), цена usd(цена в долларах США) и цена руб (цена в рублях, вычисляемая на основании цены в долларах и текущего курса).
После того, как все данные обработаны, значения переменных $menu, $list, $productname подставляются в шаблон. Сформированный прайс-лист возвращается пользователю в виде html-страницы.
Ниже приведен текст программы, генерирующей прайс-листы.
<?
$menu='';
$list='';
$minpid=0;
$productname='';
$fp=fopen("usd","r");
$rubl=fgets($fp);
fclose($fp);
mysql_connect("localhost","","");
mysql_select_db("mybase");
$q=mysql_query("select * from products order by pid");
$firstproduct=1;
while($r=mysql_fetch_array($q)) {
if ($firstproduct) {
$minpid=$r["pid"];
$firstproduct=0;
}
$menu.='<tr><td><a href="pricelist.php?pid='.$r["pid"].'">'.$r["description"].'</a></td></tr>';
}
if (!isset($pid)) $pid=$minpid;
$q=mysql_query("select description from products where pid=$pid");
if (mysql_num_rows($q)>0) {
$r=mysql_fetch_array($q);
$productname=$r["description"];
}
$q=mysql_query("select * from models where pid=$pid");
while($r=mysql_fetch_array($q))
$list.='<tr><td>'.$r["firm"].' '.$r["model"].'</td><td>'.$r["price"].'</td><td>'.$r["price"]*$rubl.'</td></tr>';
?>
<html>
<head>
<title>Прайс-лист</title>
</head>
<body>
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
<td width="25%" valign="top">
<table width="100%" cellpadding="0" cellspacing="5">
<tr>
<td><b>Разделы</b></td>
</tr>
<? echo $menu; ?>
</table>
</td>
<td valign="top">
<table width="100%" cellpadding="0" cellspacing="5">
<tr>
<td colspan="3"><font size="5"><u><? echo $productname; ?></u></font><br><br></td>
</tr>
<tr>
<td><b>Изделие</b></td>
<td><b>Цена USD</b></td>
<td><b>Цена РУБ</b></td>
</tr>
<? echo $list; ?>
</table>
</td>
</tr>
</table>
</body>
</html>