我正在从SQLite数据库中基于表单读取一些值
my $Fruits= $FORM{Fruits};
my $FruitsTable =0;
从数据库中获取值后,应将它们存储在名为
my $SelectedFruits
的变量中。while ( my @column = $sth->fetchrow_array() ) {
$FruitsTable = 1;
# Within the table there is a row called Tropical which contains bananas, guaves and oranges. I want to select bananas and guaves
my $SelectedFruits = print "<tr>
<td>$Tropical[0]</td>
<td>$Tropical[1]</td>
</tr>";
}
如果找到它们,则应打印一个带有我选择的表格(我的问题是打印命令的时间):
if ( $FruitsTable == 1 ) {
print "<table>
<thead>
<tr>
<th>Bananas</th>
<th>Guave</th>
</tr>
</thead>
<tbody>";
$SelectedFruits;
print "</tbody></table>";
}
代码退出没有错误。
这里的问题是先打印
$bananas
,然后再打印表格的页眉和页脚,所以表格看起来很疯狂。如何首先打印表格的页眉,然后打印
$bananas
,然后打印表格的页脚? 最佳答案
在编写的每个Perl程序的顶部,必须始终use strict
和use warnings 'all'
。这个问题对您有很大帮助
问题是
my $bananas = print "<tr>
<td>$happyBananas[0]</td>
<td>$hippieBananas[1]</td>
</tr>";
将立即打印表行,将词法变量
$bananas
设置为1(print
的返回代码),然后在循环结束时将其丢弃您需要这样的东西,它将表的内容累积到非局部变量
$bananas_rows
中,而不是打印它,然后还可以用作标志来确定是否有要打印的表请注意,我使用了“这里文档”,它会弄乱缩进,但比裸双引号更具可读性
my $bananas_rows; # Don't initialise variables without a reason
while ( my @column = $sth->fetchrow_array() ) {
$bananas_rows .= <<END_HTML;
<tr>
<td>$happyBananas[0]</td>
<td>$hippieBananas[1]</td>
</tr>
END_HTML
}
if ( $bananas_rows == 1 ) {
print <<END_HTML;
<table>
<thead>
<tr>
<th>Happy Bananas</th>
<th>Hippie Bananas</th>
</tr>
</thead>
<tbody>
END_HTML
print $bananas_rows;
print "</tbody></table>";
}