On-Line Библиотека www.XServer.ru - учебники, книги, статьи, документация, нормативная литература.
       Главная         В избранное         Контакты        Карта сайта   
    Навигация XServer.ru






 

Работа с MySql. Создание Web интерфейса

Автор: © Green Kakadu

Весь смысл нашей разработки теряется, если мы ее не облачим в Web оболочку или иначе говоря, не создадим для нее Web интерфейс. В первую очередь, нас интересует список категорий. В предыдущей статье:"Работа с MySql. Введение." был рассмотрен пример с SQL запросом, который выводит список категорий на консоль. Теперь нам надо вывести это все в HTML страницу.

Значит установим цель: вывести в две колонки список категорий, слегка облагородив его. Поступим так: изготовим любую HTML страницу с необходимым нам дизайном, и в то место, где нам нужен список категорий поставим комментарий :


<!-- CATEGORIES_HERE -->
Сей шаг мы делаем для того, чтобы скрипт не перегружать текст программы избыточным кодом. Итак, приступим:
  1. Вывести заголовок типа данных;
  2. Выполнить SQL запрос;
  3. Разобрать результат;
  4. Вставить результат в шаблон HTML страницы;
План действий составлен, можно кодировать.

#/usr/bin/perl
# Используем библиотеку DBI
use DBI;
# Выведем заголовок типа данных
print "Content-type:text/html\n\n";
# коннектимся к серверу MySql
my $dbh = DBI->connect("DBI:mysql:database=ваша_база_данных;host=адрес_сервера_mysql",
"логин", "пароль") || die $DBI::errstr;
# готовим запрос
my $result = $dbh->prepare("SELECT * FROM category");
#  и выполняем его
$result->execute();
# начинаем вывод в шаблон вместо комментария.
open FILE, "cat_template.html" || die ("Не могу открыть файл cat_template.html!\n");
@arr = <FILE>;
close FILE;
# ищем строку комментария
foreach $line(@arr) {
if ($line =~ "<!-- CATEGORIES_HERE") { # если нашли,
print "<tr>\n";                 # начинаем вывод таблицы
$bg  = 1;                             # признак начатой строки таблицы
$col = 1;                             # номер текущей колонки
print "<table width = \"80%\">\n";
# разбор резульата SQL запроса
while (my $ln = $result->fetchrow_hashref()) {
if ($bg == 1) {    # начата строка таблицы
if ($col == 1) {  # если первая колонка
print "<td>",$ln->{'name'},"</td>";
$col++;
} else { # $col == 2 т.е. 2-я колонка
print "<td>",$ln->{'name'},"</td></tr>\n";
$col = 1;
$bg = 0;
}

} else {
if ($col == 1) { # начинаем строку таблицы
print "<tr>&td;td>",$ln->{'name'},"&td;/td>";
$col = 2;
$bg = 1;
} else { # $col == 2
print "<td>",$ln->{'name'},"</td></tr>\n";
$col = 1;
$bg = 0;
}
}
}
if ($bg == 1) {  # если строка начата и больше нет данных в результате
print "<td> </td></tr>\n"; # надо корректно закрыть начатую строку таблицы
}
print "</table>\n";  # и закрыть таблицу
}
}
# метод finish  означает, что ссылка на текущий SQL запрос использоваться больше не будет
# и его можно завершить. По идее, его нужно вызывать перед выполнением нового запроса или перед
# разрывом соединения с базой данных.
# Вообще-то когда все данные выбраны из результата, этот метод вызывается автоматически,
# но возникают ситуации, когда его нужно вызывать принудительно. На моей машине именно так и было
# У вас эта ситуация может и не возникнуть. 
$result->finish();
# Разрыв соединения с сервером.
$dbh->disconnect();
В результате вы должны получить следующую таблицу (рамки включены умышленно):
Интернет Развлечения
Документация Софт
Поисковые системы Чаты
Для разработчиков Документация по ПХП
Фидо-гейты Новости

Все хорошо, только толку от нашей таблицы нет никакого. Нужно, чтобы, щелкнув по категории, открывалась страница со ссылками этой категории. Для этого нужно немного дописать код нашей программы. Введем переменную "$scr_name", обозначающую файл, содержащий скрипт, который будет выводить страницу со ссылками. После строки use DBI; вставим строку $scr_name="getlinks.pl"

Далее, внутри цикла while заменим все параметры функции print .... $ln->{'name'} на
<a href=\"$scr_name?page=$ln->{'id'}\">$ln->{'name'}</a>
Должно получиться что-то типа:
print "<td>","<a href=\"$scr_name?page=$ln->{'id'}\">$ln->{'name'}</a>","</td></tr>\n";
После этой процедуры все категории в вышеприведенной таблице в результате окажутся ссылками, правла неработающими, так как сам скрипт нам предстоит только написать.



Литература по Perl