我想在网格布局中的PHP表中获取数据。所以我做了这个代码。我不知道出了什么问题,也不知道我是否错过了什么。我希望这个表有三列,但它只显示了一列。任何帮助都将不胜感激。
这是代码:
<html>
<head>
<title>PAGINATION FILTER</title>
</head>
<body>
<?php include 'conn.php';?>
<?php
$stmt=$con->prepare('SELECT author, book_name, language FROM bk_tst_fltr ORDER BY id LIMIT 8');
$stmt->execute();
$stmt->bind_result($author, $book_name, $language);
$stmt->store_result();
$i=0;
?>
<table border="1" cellpadding="10">
<?php
while($stmt->fetch()){
if($i % 3 == 0){
?><tr><td><?php echo $author,"'n</br>",$book_name,"'n</br>", $language ;?></td>
<?php
}}
?></tr></table>
</body>
</html>
您的if($i % 3 == 0){
行只是让您只显示每三分之一的结果,或者如果您在任何地方实际增加$i
变量,就会显示结果。
您可能希望使用该逻辑来启动新行,但仍然输出每一行。
试试这样的东西:
<table border="1" cellpadding="10"><tr>
<?php
$i = 0;
while($stmt->fetch()){
if ($i > 0 && ($i % 3 == 0)) { // every third row, but not the first time
echo("</tr><tr>");
}
echo("<td>{$author}<br>{$book_name}<br>{$language}</td>");
$i++;
}
?>
</tr></table>
在最开始的时候,它启动一个表和第一行,然后为您找到的每个结果从foreach
循环中输出一个新的<td>
单元格,<tr>
在最后关闭。这将导致所有结果并排显示在一行中。
最后一步是,在每第三行($i % 3 == 0
)之前——但不是第一次($i > 0
)——我们希望关闭当前行并开始新的行:</tr><tr>
。
我在上面也解决了其他几个小问题:
- 实际上,您并没有在原始代码中增加
$i
变量 - 您为输出的每个结果启动一个新的
<tr>
,但只关闭其中一个结果(在循环的最后) - 您使用
</br>
作为换行符,这不是有效的HTML。您需要<br>
或<br/>
此方法以适当数量的<td>
标记结束,因此每行中总是有3个(或2个,跨度为2,当最后一行中只有1个数据项时):
<table border="1" cellpadding="10">
<tr>
<?php
$i = 0;
$html = '';
while($stmt->fetch()){
$html .= '<td>'.$author."'n</br>".$book_name."'n</br>". $language.'</td>';
if ($i%3 == 2){
$html .= "</tr>'n<tr>";
}
$i++;
}
//use $i%3 to figure out how to finish off table
if ($i%3 == 0){
$html = substr($html, 0, -5);//get rid of last <tr> tag
} elseif($i%3 == 2) {
$html .= '<td> </td><tr>';
} else {
$html .= '<td span="2"> </td><tr>';
}
echo $html;
?>
</table>