我想在网格布局中获取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>
答案 0 :(得分:0)
您的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>
一开始,它启动一个表和第一行 - 然后它为<td>
循环输出一个新的foreach
单元格,用于找到的每个结果 - 以及{{1} }在最后关闭。这将导致所有结果并排放在一行上。
然后最后一步是在每第三行(<tr>
)之前 - 但不是第一次($i % 3 == 0
)我们要关闭当前行并开始一个新行:{{1} }。
我还修了几个其他的小问题:
$i > 0
变量</tr><tr>
,但只关闭其中一个(在循环结束后的最后)。$i
作为换行符 - 这是无效的HTML。您需要<tr>
或</br>
代替。答案 1 :(得分:0)
此方法使用适当数量的<td>
标记完成,因此每行总共有3个(或者当最后一行中只有1个数据项时,2个跨度为2):
<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>