Работа с MySql. Создание Web интерфейса
Весь смысл нашей разработки теряется, если мы ее не облачим в Web оболочку или иначе говоря, не создадим для нее
Web интерфейс. В первую очередь, нас интересует список категорий. В предыдущей статье:"Работа с MySql. Введение."
был рассмотрен пример с SQL запросом, который выводит список категорий на консоль. Теперь нам надо вывести это все в HTML страницу.
Значит установим цель: вывести в две колонки список категорий, слегка облагородив его. Поступим так: изготовим
любую HTML страницу с необходимым нам дизайном, и в то место, где нам нужен список категорий поставим
комментарий :
<!-- CATEGORIES_HERE -->
Сей шаг мы делаем для того, чтобы скрипт не перегружать текст программы избыточным кодом.
Итак, приступим:
- Вывести заголовок типа данных;
- Выполнить SQL запрос;
- Разобрать результат;
- Вставить результат в шаблон 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";
После этой процедуры все категории в вышеприведенной таблице в результате окажутся ссылками, правла неработающими,
так как сам скрипт нам предстоит только написать.
|