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