2009-02-23 49 views
2

我正在從數據庫中獲取數據。它有4行6列。我想在HTML表格中顯示,但有問題。我已經爲6列製作了TH。但是,我在顯示4行時遇到了問題。這是我到目前爲止有:如何使用Perl在表格中顯示數據?

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 ......等是陣列

雖然dsplaying的數據,如果我做的:

foreach (@first) 
{ 
     print "<td>$_</td>"; 
} 

即垂直顯示數據但我希望它水平顯示。

回答

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"; 
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"; 
+0

這是Perl的 - TMTOWTDI! – 2009-02-23 06:01:25

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; 
+0

這個代碼甚至沒有被編譯。 – Jill448 2014-09-19 14:43:32

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"; 
     } 
} 
相關問題