WebScript.Ru
C:\   главная  ::   о сайте  ::  каталог скриптов  ::  гнездо  ::  форум  ::   авторам  :: Новостройки ::   ХОСТИНГ  ::

|| разделы::
|| поиск по сайту::

|| реклама::
|| новости почтой::
Рассылки Subscribe.Ru ::



Новости сайта WebScript.Ru
Популярные статьи

Hot 5 Stories

|| рекомендуем::




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


Прислал: Alexander Suhhinin [ 01.07.2001 @ 07:00 ]
Раздел:: [ Статьи по Perl ]


Весь смысл нашей разработки теряется, если мы ее не облачим в 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";
После этой процедуры все категории в вышеприведенной таблице в результате окажутся ссылками, правла неработающими, так как сам скрипт нам предстоит только написать.




 :::::  Alexander Suhhinin пишет 05.07.2001 @ 06:44 
Досадная ошибка закралась в листинг (моя вина).
строки
print "&lt;/table&gt;\n"; # и закрыть таблицу
}
нужно заменить на
print "&lt;/table&gt;\n"; # и закрыть таблицу
} else {
print $line;
}
Прошу прощения, если кто недоумевал, зачем открывался файл шаблона :))

 :::::  Perl-Lamer пишет 31.07.2001 @ 07:31 
Не проще будет так (для этого конкретного случая):

$sth = $dbh->prepare("select * from category");
$sth-&gt;execute;
print q{&lt;table width="100%" border=1&gt;};
while (my @ln1 = $sth-&gt;fetchrow_array) {
if($aaa) { print qq{&lt;tr&gt;&lt;td&gt;$ln1[1]&lt;/td&gt;} }
else { print qq{&lt;td&gt;ln1[1]&lt;/td&gt;&lt;/tr&gt;}}
$aaa= not $aaa;
}
if(!$aaa) { print q{&lt;td&gt;&nbsp;&lt;/td&gt;&lt;/tr&gt;}
print q{&lt;/table&gt;}

И всё равно непонятно, зачем файл темплейта открывать? :)))
может предполагалось print FILE "что-то там"?
и как потом его юзеру показать без явных редиректов?



 :::::  Evgeniy пишет 20.10.2001 @ 15:17 
Прекрассные статьи, я вообще не знал как работать с mySQL теперь более мение знаю, в следующей статье хорошо было бы узнать как удалять записи, обновлять и как написать скрипт именно, чтобы выводились конкретно те ссылки которые нужны по разделам!
Спасибо!
 :::::  sidnet пишет 31.12.2001 @ 01:11 
По-моему строку

print "<tr>&td;td>",$ln->{'name'},"&td;/td>";

надо заменить на

print "<tr><td>",$ln->{'name'},</td>";

 :::::  Padla пишет 03.11.2003 @ 23:23 
Спасибо, очень помогли:)
Имя:
Email:
URL

Введите сумму двух чисел девять и одинн (девять+одинн=?)
Запомнить мою информацию

* Html запрещен* Ваш E-mail опубликован не будет.

Copyright © 2000-2001 WebScript.Ru nas@webscript.ru
Design © 2001 by Parallax Design Studio (aka Spectator.ru)
Все торговые марки и авторские права на эту страницу принадлежат их соответствующим владельцам.
Сгенерировано за: 0.0239871