初心者だけどPerlが大好き

コードが世界を変える!

単一ページの名簿表示 

文章だけで読むと 非常に悩みます。
staffs.pl  のコードには フォーム部分がないんです。
勝手に手前味噌に コードを書きました。
索引ページの表示と個別のエントリの表示だけとありますので。
こんな感じのことを この本は言いたいのではないかと。。。


staffs.pl

#!D:/xampp/perl/bin/perl
use CGI;
use utf8;
use WebDB;
$q = new CGI;
$q->start_html(-title => "Staff Directory", -bgcolor => "white");
print $q->header(-type =>'text/html',-charset => 'utf-8'),
$q->start_html(-title=>"Database Form"),
$q->h1(' データを検索します'),
$q->start_form,
$q->em("Your ID"),
$q->textfield(-name=>'id'),
$q->br,
$q->p,
$q->reset,
$q->submit(-name =>'Action', -value =>'検索'),
$q->submit(-name =>'Action', -value =>'Scream');
$q->end_form;
$param=$q ->param('id');
my $dbh = WebDB::connect ();
my $id = WebDB::trim ($param);
if ($id ne "")
{
display_entry ($dbh, $id);
}
else
{
display_index ($dbh);
}
$dbh->disconnect ();
print end_html ();
exit (0);
sub display_entry
{
my ($dbh, $id) = @_;
my ($sth, $ref);
$sth = $dbh->prepare ("SELECT * FROM staff WHERE id = ?");
$sth->execute ($id);
$ref = $sth->fetchrow_hashref ();
$sth->finish ();
if (!$ref)
{
print $q->p($q->escapeHTML ("No record for ID $id was found."));
return;
}
print $q->p($q->escapeHTML ("ID: $ref->{id}"));
print $q->p($q->escapeHTML ("Name: $ref->{lname}, $ref->{fname}"));
print $q->p($q->escapeHTML ("Position: $ref->{position}"));
print $q->hr ();
print $q->p("[" . $q->a ({-href =>$q->referer()}, "index") . "]");
}
sub display_index
{
my $dbh = shift;
my ($sth, @nav_bar, @item_list);
my $cur_letter = "";
@nav_bar = gen_nav_bar ($dbh);
if (!@nav_bar)
{
print $q->p ("The directory has no entries.");
return;
}
print $q->p ($q->a ({-name => "top"},
"Select a letter to go to that part of the directory:"));
print $q->hr (), $q->center (@nav_bar), $q->hr ();
$sth = $dbh->prepare (
"SELECT id, CONCAT(lname,', ',fname) AS name
FROM staff ORDER BY name");
$sth->execute ();
while (my ($id, $name) = $sth->fetchrow_array ())
{
if ($cur_letter ne uc (substr ($name, 0, 1)))
{print $q->ul ($q->li (\@item_list)) if @item_list;
@item_list = ();
$cur_letter = uc (substr ($name, 0, 1));
print $q->p (
$q->strong ($q->a ({-name => "$cur_letter"}, $cur_letter ))
. "[" . $q->a ({-href => "#top"}, "index") . "]");}
push (@item_list, $q->a({-href =>$q->self_url() . "?id=$id"} ,  $q->escapeHTML ($name) ))
;}
$sth->finish ();
print $q->ul ($q->li (\@item_list)) if @item_list;
print $q->hr (), $q->center (@nav_bar), $q->hr ();
}
sub gen_nav_bar
{
my $dbh = shift;
my $letter_ref;
$letter_ref = $dbh->selectcol_arrayref (
"SELECT DISTINCT UPPER(LEFT(lname,1)) AS letter FROM staff ORDER BY letter");
return () if !$letter_ref || !@{$letter_ref};
return (map { "[" . $q->a({-href => "#$_"}, $_ ) . "]\n" } @{$letter_ref});}