我从数据库中获取数据。它有4行6列。我想在HTML表格中显示这个但是遇到了问题。我为6列制作了TH。但是,我在显示4行时遇到了问题。这就是我到目前为止所做的:
while (($f1, $t2, $n3, $k4, $d5, $e6) = $sth1->fetchrow_array)
{
push (@first, $f1);
push (@second, $t2);
push (@third, $n3);
push (@fourth, $k4);
push (@fifth, $d5);
push (@sixth, $e6);
}
@ first,@ second ...以及其他人是数组
如果我这样做,则显示数据:
foreach (@first)
{
print "<td>$_</td>";
}
这是垂直显示数据,但我想让它水平显示。
答案 0 :(得分:8)
您也可以使用HTML::Table。
use strict;
use warnings;
use HTML::Table;
my $table = HTML::Table->new(
-cols => 6,
-border => 1,
-padding => 1,
-head => [qw( f1 t2 n3 k4 d5 e6 )],
);
# do query here.
while ( my @row = $sth->fetchrow_array ) {
$table->addRow(@row);
}
$table->print;
答案 1 :(得分:5)
问题中的代码是使用Perl的DBI(数据库接口)编写的:
print "<table>\n";
while (($f1, $t2, $n3, $k4, $d5, $e6) = $sth1->fetchrow_array)
{
print " <tr>\n";
print " <td>$f1</td>\n";
print " <td>$t2</td>\n";
print " <td>$n3</td>\n";
print " <td>$k4</td>\n";
print " <td>$d5</td>\n";
print " <td>$e6</td>\n";
print " </tr>\n";
}
print "</table>\n";
或者您可以将行读入数组,然后更简洁地打印数组:
print "<table>\n";
while (my(@row) = $sth1->fetchrow_array)
{
print " <tr>\n";
print " <td>$val</td>\n" foreach my $val (@row);
print " </tr>\n";
}
print "</table>\n";
答案 2 :(得分:2)
如果您想要更多的灵活性而无需编写尽可能多的代码,您可能还需要查看HTML :: Table :: FromDatabase。它为您提供HTML,并为您提供轻松格式化的自由。它需要一些练习,但它已成为我的武器库中的一个宝贵的。
以下是一些示例代码,可让您了解可以使用它做什么
use DBI;
use HTML::Table::FromDatabase;
use HTML::Table;
use CGI;
# Start the CGI wrapper
$query = new CGI();
# Just build the STH like normal, with either the SQL in-line or an $sql variable
my $sth = $mysql_dbh->prepare("SELECT DISTINCT field1, field2 FROM table ORDER BY field1");
$sth->execute;
# Tell the module to build the table using the STH you executed before
my $table = HTML::Table::FromDatabase->new(-sth=>$sth,
-border=>1, # We want a border on the entire table
-callbacks=>[
{
# On the switch column, we want to add an HREF with the data in the URL
column=>'field1',
transform=>
sub { $_ = shift; qq[<A HREF="$_">$_</A>]; },
},
{
# This example lets you return a value based on what value is in the field
column=>'field2',
transform=>
sub { $text = shift; DidItMatch($text); },
}],
# The two rows below are used to set CSS classes on even and odd rows if you want different formatting
-evenrowclass=>'evenrow',
-oddrowclass=>'oddrow'
);
# Take the entire table and align all of the 2nd column to center
$table->setColAlign(2,'center');
# The following lines are just demonstrations of what else can be changed. There are a lot, so look at HTML::Table to get all of them
#$table->setColBGColor(2,'red'); # Sets the background color of all cells in a column
#$table->SetColVAlign(2,'middle'); # Sets the vertical alignment of all cells in a column
#$table->setColWidth(2,100); # Sets the width of a column. Could also use setColWidth(2,'50%');
#$table->setColNoWrap(2,1); # Sets the no-wrap property of a colum. 0=Wrap 1=NoWrap
# The following lines allow you to retrieve information about the table that was created.
my $row_count = $table->getTableRows; # Retrieves the number of rows in the table
my $column_count = $table->getTableCols; # Retrieves the number of columns in the table
# Finally, print the finalized table HTML
$table->print;
# Wrap up the STH and DBH if needed
$sth->finish;
$mysql_dbh->disconnect;
sub DidItMatch
{
my $text = shift;
if ($text eq 'Good text')
{
return "Matched";
} else
{
return "$text";
}
}
答案 3 :(得分:1)
这更接近你想要实现的目标吗?
# display one HTML table row for each DB row
print "<table>\n";
while (my @row = $sth1->fetchrow_array) {
print "<tr>".join("", map { "<td>${_}</td>" } @row)."</tr>\n";
}
print "</table>\n";