div.main {margin-left: 20pt; margin-right: 20pt}
Работа с MySql. Создание Web интерфейса
Cухинин A., Webscript.ru
Весь смысл нашей разработки теряется, если мы ее не облачим в Web
оболочку или иначе говоря, не создадим для нее Web интерфейс. В первую
очередь, нас интересует список категорий. В предыдущей статье:"Работа с
MySql. Введение." был рассмотрен пример с SQL запросом, который
выводит список категорий на консоль. Теперь нам надо вывести это все в
HTML страницу.
Значит установим цель: вывести в две колонки список категорий, слегка
облагородив его. Поступим так: изготовим любую HTML страницу с необходимым
нам дизайном, и в то место, где нам нужен список категорий поставим
комментарий :
<!-- CATEGORIES_HERE --> Сей шаг мы делаем для
того, чтобы скрипт не перегружать текст программы избыточным кодом. Итак,
приступим:
Вывести заголовок типа данных;
Выполнить SQL запрос;
Разобрать результат;
Вставить результат в шаблон HTML страницы;
План действий составлен, можно кодировать. >
#/usr/bin/perl
# Используем библиотеку DBI
use DBI;
# Выведем заголовок типа данных
print "Content-type:text/htmlnn";
# коннектимся к серверу 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"; После
этой процедуры все категории в вышеприведенной таблице в результате
окажутся ссылками, правла неработающими, так как сам скрипт нам предстоит
только написать.
|