我刚刚玩过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文档的表格?
答案 0 :(得分:1)
您应该熟悉POD for the CGI module。在那里,您将找到一个表创建示例:
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标签助手并不神奇;它们只是Perl函数(或取决于您如何使用模块的方法),它们与它们所代表的HTML密切相关。如果您必须在HTML中输入<table><tr><th>...
,那么您的代码帮助程序必须是table
,Tr
和th
等。使用标记或代码帮助程序的组合只要获得输出的HTML对于浏览器来说是可理解的,在循环中就可以了。
使用CGI模块的脚本可以从命令行运行,这是一个很好的调试工具,因为它们会将原始HTML转储到屏幕上供您查看。
答案 1 :(得分: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;