2013-07-14 185 views
2

我想在网格布局中的PHP表格中获取数据。所以我做了这个代码。我不知道出了什么问题,或者我错过了什么。我希望表格有三列,但它在单列中显示表格。任何帮助将不胜感激。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

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

非常感谢您解释的答案 – Kishore

+0

如果我想在不使用表格的情况下使用div,我怎样才能做到这一点。因为我看到的每个网站都有这个div标签和一些li标签 – Kishore

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

这似乎是不必要的,因为它仍然是有效的HTML表格行,其行数比另一行少。从规范:“如果该表的列数大于给定行的单元格数(包括跨过行的单元格之后),那么丢失的单元格将被视为在表格的右侧进行处理并呈现为空细胞“。 – jcsanyi

+0

@jcsanyi - 你说得对。当我编写它时,我使用了一个'foreach'循环,'$ key'的值比'$ i'少1。感谢您的高举。我刚刚编辑它。 –