3

我刚玩过 Perl CGI 和 SQLite。我认为这样的事情可以完成这项工作。

my $res = $dbh->selectall_arrayref("SELECT name, surename, phone FROM status;"),
print $cgi->table(
$cgi->Tr(
    { -align => "CENTER", -valign => "TOP" },
    $cgi->th( [ 'Name', 'Surename', 'Phone' ] )
),
foreach my $row (@$res){
    ( $name, $surename, $phone ) = @$row,
    print $cgi->Tr( $cgi->td($name), $cgi->td($surename), $cgi->td($phone) ),
  }
);

是否需要手动创建 HTML 文档的表格?

4

2 回答 2

1

您应该熟悉CGI 模块的 POD。在其中,您将找到一个创建表的示例:

print table({-border=>undef},
           caption('When Should You Eat Your Vegetables?'),
           Tr({-align=>'CENTER',-valign=>'TOP'},
           [
              th(['Vegetable', 'Breakfast','Lunch','Dinner']),
              td(['Tomatoes' , 'no', 'yes', 'yes']),
              td(['Broccoli' , 'no', 'no',  'yes']),
              td(['Onions'   , 'yes','yes', 'yes'])
           ]
           )
        );

从示例中可以看出,您确实需要指定进入表格的成分。CGI 模块的 HTML 标签助手并不是真正的魔法。它们只是密切反映它们所代表的 HTML 的 Perl 函数(或取决于您如何使用模块的方法)。如果您必须输入<table><tr><th>...HTML,您的标签助手将需要是table、、Trth等。在循环中使用标签或标签助手的组合就可以了,只要获取输出的 HTML 对浏览器来说是可理解的。

使用 CGI 模块的脚本可以从命令行运行,这是一个很好的调试工具,因为它们会转储原始 HTML 并在屏幕上供您查看。

于 2012-07-13T07:28:05.533 回答
0

答案是响亮的NO。这两行代码:

my $cats = $db->selectall_arrayref("select * from pubs..authors");
print map { $q->Tr(undef, $q->td($_)) ."\n"} @$cats;

会给你(嗯,我..)

<tr><td>172-32-1176</td> <td>White</td> <td>Johnson</td> <td>408 496-7223</td>     <td>10932 Bigge Rd.</td> <td>Menlo Park</td> <td>CA</td> <td>94025</td> <td>1</td></tr>
<tr><td>213-46-8915</td> <td>Green</td> <td>Marjorie</td> <td>415 986-7020</td> <td>309 63rd St. #411</td> <td>Oakland</td> <td>CA</td> <td>94618</td> <td>1</td></tr>
<tr><td>238-95-7766</td> <td>Carson</td> <td>Cheryl</td> <td>415 548-7723</td> <td>589 Darwin Ln.</td> <td>Berkeley</td> <td>CA</td> <td>94705</td> <td>1</td></tr>
.... and however many more authors from pubs

为了完整起见,使用 hashref,您可以像这样拉出标题

my $cats = $db->selectall_hashref("select * from pubs..authors", [ au_id]);

my @rows = values %$cats; # array of hashes now

print $q->Tr(undef, $q->th([keys( %$rows[0] )])),"\n"; #borrow keys from first guy 
print map { $q->Tr(undef, $q->td( [ values(%$_) ] ) ),"\n"; }  @rows;
于 2013-09-22T10:52:53.980 回答