2010-11-09 89 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