我正在从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 strictuse 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>";

}

10-07 23:48