2

我想以网格布局在 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>
4

2 回答 2

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循环中为您找到的每个结果输出一个新单元格 -<tr>最后关闭。这将导致所有结果并排在一行上。

然后最后一步是在每第三行之前 ( $i % 3 == 0) - 但不是第一次 ( $i > 0) 我们要关闭当前行并开始一个新行:</tr><tr>.

我在上面还修复了其他几个小问题:

  1. 您实际上并没有$i在原始代码中增加变量
  2. 您为输出的每个结果都开始了一个新<tr>的结果,但只关闭其中一个(在最后,在循环之后)。
  3. 您正在使用</br>换行符 - 这不是有效的 HTML。你要么想要,要么<br>取而代之<br/>
于 2013-07-14T06:29:33.963 回答
0

此方法以适当数量的<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>&nbsp;</td><tr>';
    } else {
        $html .= '<td span="2">&nbsp;</td><tr>';
    }
    echo $html;
    ?>
</table>
于 2013-07-14T07:04:34.697 回答