Окончательный этап этой головоломки - сценарий details.cgi, который использует переданные ему через URL данные (идентификатор статьи и идентификатор комментария) для того, чтобы создать запрос к базе данных и вывести одну страницу (см. рис. 20.7) с именем автора, временем размещения комментария и текстом комментария.
Листинг 20.39.
#!/usr/bin/perl
# считать необходимые модули use DBI;
use CGI;
# инициировать объект CGI $cgi = new CGI();
# распечатать HTTP- заголовки print $cgi->header();
# распечатать заголовок страницы print $cgi->start_html;
# проверка отправки идентификатора статьи if (!$cgi->param('aid'))
{
print " Невозможно найти идентификатор статьи, завершение работы...";
die;
}
else
{
$aid = $cgi->param('aid');
}
# проверка идентификатора комментария if (!$cgi->param('cid')
{
print " Невозможно найти идентификатор комментария, завершение работы
die;
}
else
{
$cid = $cgi->pararn('cid');
}
# подключиться к базе данных
my $dbh = DBI->connect("DBI:mysql:database=dbl;host=localhost",
"root", "pass', ('RaiseError' => 1));
# выбрать наименование статьи и ее описание
my $sth = $dbh->prepare("SELECT atitle, adesc FROM articles WHERE aid = '$aid'");
$sth->execute();
# если получен результат
# распечатать содержание статьи
# иначе - сообщение об ошибке if ($sth->rows() > 0)
{
$ref = $sth->fetchrow_hashref();
print "<font face="Verdana, Aria1" size="4"
color="#66CC00">n";
print $ref->{'atitle'), "n";
print "</font>n"; print "<p>n";
print "<font face="Verdana, Aria1" size="2"
color="Black">n";
print $ref->{'adesc'), "n"; print "</font>n";
}
else
{
print " Невозможно выбрать содержание статьи, завершение работы..."; die;
}
# очистить дескриптор оператора $sth->finish ();
print" <hr> n" ;
# а теперь получить детали комментария
# выполнить запрос
my $sth = $dbh->prepare("SELECT cemail, ctimestarnp.csubject. cpost FROM comments WHERE cid = '$cid'");
$sth->execute() ;
# распечатать содержание комментария if ($sth->rows() > 0)
{
$ref = $sth->fetchrow_hashref();
print "<font face="Verdana, Arial" size="2"
color="Black">n";
print "Размещен <b>$ref->{'cemail'}</b> в $ref->{'ctimestamp'} <br>n":
print "^^ема:</b> $ref->{'csubject'} <br>n";
print "^комментарий:</b> $ref->{ 'cpost'} <br>n";
print "</font>n"; print "<p>n";
}
else
{
print " Невозможно выбрать комментарий, завершение работы..."; die;
}
print" <hr>n";
# закрыть соединение с базой данных $sth->finish(); $dbh->disconnect();
# Распечатать нижний колонтитул страницы
# со ссылкой на ответы с возможностью просмотра других комментариев print <<EOF;
<font face="Verdana, Arial" size="2" color="Black">
<a href="post.cgi?aid=$aid&creply=$cid">Ответить</a> на этот комментарий rara<a
href="article.cgi?aid=$aid">прочесть другие комментарии</a> </font>
EOF
print $cgi->end_html;
Следует обратить особое внимание на ссылку в конце сценария. В случае, когда читатель хочет ответить на этот конкретный комментарий, переменная $creply будет хранить идентификатор комментария, согласно которому будет формироваться ответ. После этого переменная $creply передается сценарию post.cgi в виде дополнительного параметра и сохраняется в базе данных. Таким образом, завершается цикл, необходимый для генерации дерева обсуждения.
Копаем глубже
Для получения более подробной информации о Perl можно порекомендовать следующие Internet-ресурсы!
• Официальный Web-узел Perl: http://www.perl.com/
• CPAN: http://www.cpan.org
• Perldoc: http://www.perldoc.com
• Справочное руководство по DBI.pm: http://search.cpan.org/author/TIMB/ DBI-1.37/DBI.pm
• Посвященный языку Perl раздел на Web-узле Melonfire, содержащий статьи, практические примеры и курсы обучения: http://www.melonfire.com/community/ columns/trog/archives.php?category=Perl
• Посвященный языку Perl раздел на Web-узле Devshed: http://www.devshed. com/Server_Side/Perl/
Резюме
DBI-интерфейс языка Perl включает широкий диапазон функций, предназначенных для управления соединением, выполнения запроса, обработки результирующих наборов и ошибок. В этой главе обсуждаются важнейшие методы каждой из перечисленных функций, примеры и иллюстрации их использования.
Не вдаваясь в сложности программирования, эта глава также содержит практический пример взаимодействия Perl и MySQL с простой системой комментариев, реализованной на Web-узле. Не пользуясь Web-сервером и применяя CGI-интерфейс в качестве шлюза, это приложение предоставляет пользователям интерфейс для просмотра, добавления и ответа на комментарии, размещенные на Web-узле. Модуль DBI-интерфейса Perl отвечает за подключение к базе данных, выборку и модификацию табличных данных и форматирование полученных данных для вывода их на экран.
ТОП-10 популярных
Для работы с вещественными числами в MySQL предусмотрено три типа данных - это типы FLOAT, DOUBLE, DECIMAL. Числовой тип FLOAT...
БОЛЬШЕ БОЛЬШИХ LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Больше больших LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
НОУТБУК с блестящим экраном
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Иди и пиши. TravelMate C100
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Магнито-оптический дисковод DynaMO
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Компьютер для гурманов.«Эксимер ДМ»
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Для длинных строк, т.е. строк длиннее 255 символов, в MySQL предусмотрены типы BLOB (Binary Large Object, большой двоичный объект) и...
В дополнение к календарным типам, предназначенным для хранения даты и времени отдельно, MySQL также поддерживает гибридные типы данных DATETIME и...
Вообще, к изменению настроек сервера прибегают очень редко. В MySQL программа заранее настроена так, чтобы соответствовать самым распространенным и основным...
Все о MySQL. Просмотр комментариев
28-12-2009
<< Предыдущая статья | Следующая статья >> |
Все о MySQL. Создание древовидного оглавления комментариев. Напечатать или умереть | Все о MySQL. MySQL и PHP |