我正在根据表单
从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
然后打印表格的页脚?
答案 0 :(得分:3)
必须始终 use strict
和use warnings 'all'
位于您编写的每个 Perl程序的顶部。用这个问题对你有很多帮助
问题是这个
my $bananas = print "<tr>
<td>$happyBananas[0]</td>
<td>$hippieBananas[1]</td>
</tr>";
将立即打印表格行,将词法变量$bananas
设置为1(返回码为print
),然后在循环结束时将其丢弃
你想要这样的东西,它将表的内容累积到非本地变量$bananas_rows
而不是打印它,然后也可以用作确定的标志是否有要打印的表格
请注意,我使用的是“here documents”,它比较简洁,但比双引号更具可读性
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>";
}