2010-11-09 92 views
0

一个php自定义函数从mysql查询返回记录集。在Html表中填充记录

我需要填充具有相等数量或两个平衡的两列表。

我知道我们可以按行数分割行数,然后使用循环来相应地填充每个td。

任何建议或最实际的方式来显示记录集到根据其大小组织的表?

此时不使用模板。

基本上需要控制TD标签从回声或不回声和填充。

示例代码:

$col_num = 2; //Number of colums to parse data onto. 

$count_r = mysql_num_rows($result)/$col_num; 

echo '<table style="width:400px;border:3px solid green;"><tr><td>'; 

$ui=1; 

while($row = mysql_fetch_array($result)) 
{        
    if($ui<$count_r) 
     { 

      echo '<input disabled type="checkbox" value="$row[id]"'; $this->ischecked($uid,$row[id]); echo "/>".$row['name'].'<br>'."\r\n"; 

     } 
    $ui++; 
} 

//FIRST COLUMN SET 

echo '</td>'; 

echo '<td>'; 

//SECOND COLUMN SET 


echo '</td></tr></table>'; 
+0

不要紧,如果记录按顺序列出? – 2010-11-09 05:24:11

+0

最好。谢谢 – Codex73 2010-11-12 03:16:55

回答

1

如果你不介意你的纪录,你可以简单地做订单(假设你有一个数组的结果称为$result)以下内容:

... 
echo "<table>"; 
for($i=0;$i<count($result);$i+=2): 
    echo "<tr>"; 
     echo "<td>{$result[$i]['field']}</td>"; 
     echo "<td>{$result[$i+1]['field']}</td>"; 
    echo "</tr>"; 
endfor; 
echo "</table>"; 

我不知道这是否是这样做的最好方法,但这是我的方式,你的情况。请记住,我没有检查是否有任何实际结果,我们假设情况如此。要检查$results是否已设置,您可以使用if语句检查它的计数编号。

更换for($i=0;$i<count($result);$i+=2):for($i=0;$i<count($result);$i+=2){endfor;}的传统格式的代码。

+0

谢谢。这个例子打开了我的头,我能够完成这个功能。 – Codex73 2010-11-12 03:40:18

1

我建议使用无序列表 - <ul>,并将CSS float属性应用于其列表项(<li>)。这样,您不必担心计数记录的数量。

只输出<li>中的每条记录,并将它们全部设置为float: left;

然后约束<ul>的高度,以便它将足够短以迫使额外的<li> s浮动到新列。

正如@Steve指出的那样,您还需要将<li>的宽度设置为常量,以便列将保持一致。并且将宽度设置为<ul>的两倍以上,并且宽度不得超过<li>宽度的三倍。

这样做的一个基本方法是在您的查询中调用mysql_num_rows()。将结果乘以每个<li>的高度,然后除以2,这将是您的<ul>的高度。这将使每列的高度相等。

可能<div> S(一个<div>每个项目,都包裹在一个单一的全球<div>)做到这一点。

但使用列表是HTML显示的信息列表的优选方式(除非该信息是在板状性质和需要每场的多个列,这你的是不和不)。

如果您需要更详细的帮助,有关于这个great Opera Web Standards article

+0

不要忘记设置'LI'的宽度以保持标准列宽。否则,他们只适合文本,所以不会都是相同的大小。 – Ben 2010-11-09 08:14:03

+0

@Steve:是的,当然。我忘了提到这一点。 – 2010-11-09 16:07:46

+0

这很不起作用。我会继续玩。 – Codex73 2010-11-11 12:31:54