php表格网格布局


php table grid layout

我想在网格布局中的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>

我在上面也解决了其他几个小问题:

  1. 实际上,您并没有在原始代码中增加$i变量
  2. 您为输出的每个结果启动一个新的<tr>,但只关闭其中一个结果(在循环的最后)
  3. 您使用</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>&nbsp;</td><tr>';
    } else {
        $html .= '<td span="2">&nbsp;</td><tr>';
    }
    echo $html;
    ?>
</table>