2012-12-08 9 views
1

我已經創建了一個mysql查詢並將結果顯示在表中,但希望將來自mysql表的字段或列名作爲表頭。我想用多個php文件來做這件事,但其中一個有點複雜,因爲它使用for循環來顯示通過共同字段相互綁定的記錄。這裏是簡單的結果表php mysql的字段名稱爲<th>?

echo "<table border='1' width='85%' cellpadding='5' align='center'>\n"; 
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) { 
echo "\t<tr align='center'>\n"; 
foreach ($line as $col_value) { 
echo "\t\t<td align='center'>$col_value</td>\n"; 
} 

echo "<td align='center'><img src=./images/$col_value border='3' ></td>"; 

echo "\t</tr>\n"; 
} 
echo "</table>\n"; 

我不知道在哪裏但標籤和如何獲得mysql列名。我嘗試了一些與mysql_field_names並沒有運氣。這是另一個帶for循環的表。

$last_pattern = null; 
echo "<table border='1' width='80%' cellpadding='5' align='center'>\n"; 
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) { 
$col_count = count($line) - 1; // Subtract 1 because image isn't in a column 
if ($line['PatternName'] !== $last_pattern) { 
if ($last_pattern !== null) { 
    echo "<td><tr align='center'>\n"; 
} 
echo "<tr align='center'>\n "; 
foreach ($line as $col_name => $col_value) { 
    switch ($col_name) { 
    case 'YarnImage': 
    break; 
    case 'PatternImage': 
    echo "<td><image src='images/$col_value' /></td>"; 
    break; 
    default: 
    echo "<td>$col_value</td>"; 
    } 
} 
$last_pattern = $line['PatternName']; 
echo "</tr>\n <tr align='center'><td colspan='$col_count'>\n"; 
} 
$yarn_image = $line['YarnImage']; 
echo "<img src='images/$yarn_image' width='150' height='150' border='3'/>\n"; 
} 
if ($last_image !== null) { 
echo "</td></tr>"; 
} 
+2

[**請不要在新代碼中使用'mysql_ *'函數**](http://bit.ly/phpmsql)。他們不再被維護,[棄用過程](http://j.mp/Rj2iVR)已經開始。看到[**紅框**](http://j.mp/Te9zIL)?學習[*準備的語句*](http://j.mp/T9hLWi),並使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli) - [這篇文章](http://j.mp/QEx8IB)將幫助你決定哪個。如果你選擇PDO,[這裏是一個很好的教程](http://j.mp/PoWehJ)。 – PeeHaa

+0

感謝您的建議,但這僅僅是一個課程項目,它只是一個學習體驗。此頁面僅在大學服務器上。 – user1883671

+0

看來你確實知道字段名稱......是否有任何理由不能在循環結果之前手動插入它們? – joequincy

回答

0

嘗試增加你上面一<th>循環foreach ($line as $col_name => $col_value)循環

$col_number = 1; // add a counter 
foreach ($line as $col_names => $col_values) { 
    if ($col_number <= $col_count){ // check if counter is >= to $col_count 
    echo "<th>$col_names</th>";} 
    $col_number++;} // increase counter by 1 
foreach ($line as $col_name => $col_value) { 
... //rest of you code 

而且,在你的代碼的第7行,你有一個無效的表元素 -

echo "<td><tr align='center'>\n"; 
+0

我使用了上面的$ col_names => $ col_values,它的工作完美是否有一種簡單的方法可以截斷最後一個列的名稱,因爲它的下面一行是空列。 – user1883671

+0

它可以使用一個簡單的計數器來完成,並根據您之前設置的'$ col_count'進行檢查,因爲它是列減去圖像的計數。我用樣品櫃檯更新了我的答案。 – Sean

+0

我試過這個計數器,並不斷打破頁面。我已經嘗試在我使用$ col_count = count($ line)-1的代碼中重新排列{},有沒有一種方法可以通過變量$ col_names來實現?我試過不同的字符串組合,它仍然不起作用 – user1883671

2

之後,你有將第一行作爲關聯數組提取,您可以使用array_keys($line)獲取列名。

如果你決定停止使用過時的EXT/MySQL的功能,並切換到轉/庫MySQLi或PDO_MYSQL,您可以享受不錯的功能,如mysqli_stmt::result_metadata()PDOStatement::getColumnMeta()