2016-05-30 40 views
0

我有一個php代碼來打印出包括列名在內的表格。打印必須是動態的,因爲它必須根據用戶輸入打印不同的大小/長度表。 :PHP - 如何打印出我的數據庫表?

<table> 
    <?php 
    while ($row = mysqli_fetch_array($results)) { 
     while ($fieldInfo = mysqli_fetch_field($results)) { ?> 
      <th> <?php echo $fieldInfo->name; ?> </th> 
      <td> <?php echo $row[$fieldInfo->name] ?> </td> 
     <?php } 
    } ?> 
</table> 

這是$results查詢:

$tName = $_POST["tableNames"]; //this data is recieved from another page 
require_once("conn.php"); 
$sql = "SELECT * FROM $tName"; 
$results = mysqli_query($conn, $sql) 
or die ('Problem with query' . mysqli_error($conn)); 

我的代碼正確地打印出表名以及第一行的數據,但它沒有正確格式化這裏是它的外觀: 另外。由於某種原因,它只打印出第一行,即使即時通過使用while循環。

+0

我會檢查你的文檔例如兩個,它看起來並不像你正確http://php.net/manual/en/mysqli-result使用它。 fetch-field.php –

+0

你的預期結果是什麼? – Toto

+0

@Toto我的預期結果是打印出包括列名在內的整個表格。打印必須能夠打印任何表格,因爲我將數據庫中5個表格名稱中的一個傳遞給頁面 –

回答

0

我給你的建議是準備兩個數組: 第一種:含列名和第二名:包含數據。

當使用兩個foreach產生第一行與標題和第二個顯示數據。您忘記添加<tr>標籤來劃分行。

0

使用

mysqli_fetch_field()功能中的結果設置爲對象返回下一列。它只會返回所有列名稱而不是表格的記錄。

您需要使用mysqli_fetch_array()用於獲取所有記錄:

while ($info = mysqli_fetch_array($results,MYSQLI_ASSOC)) { 
    { 
    echo $info['rid']; 
    echo $info['level']; 
    .... 
    } 
+0

是的錯誤...我已經更新了答案 –

+0

事情是我不能硬編碼的列名,因爲我需要能夠打印任何表基於從表名獲得一個用戶輸入。所以它可以是數據庫中的5個表中的任何一個。 –

0

我結束了使用陣列中存儲的列名的塔拉斯建議:

<table> 
    <?php 
    while ($fieldInfo = mysqli_fetch_field($results)) { ?> 
     <th> <?php echo $fieldInfo->name; ?> </th> 
     <?php 
     $colNames[] = $fieldInfo->name; 
     ?> 
    <?php } 

    while ($row = mysqli_fetch_array($results)) { ?> 
     <tr> 
     <?php for ($i=0; $i<sizeof($colNames); $i++) { ?> 
      <td><?php echo $row[$colNames[$i]] ?> 
     <?php } ?> 
     </tr> 
    <?php } ?> 
</table> 
0

由於我明白了,你要顯示所有表及其列? 所以,你可以格式化像下面

$sql = "SHOW TABLES FROM dbname"; 
$result_tables = mysqli_query($link, $sql); 
echo "<table border=1>"; 
echo "<tr><td>Table name</td><td>Fields name</td></tr>"; 
while($row = mysqli_fetch_array($result_tables)) { 
    echo "<tr>"; 
    echo "<td>".$row[0]."</td>"; 

    $sql2 = "SHOW COLUMNS FROM ".$row[0];\\row[0] is used to get table name 
    $result_fields = mysqli_query($link, $sql2); 
    echo "<td>"; 
    while($row2 = mysqli_fetch_array($result_fields)) { 
     echo $row2['Field'].','; 
    } 
    echo "</td>"; 
    echo "</tr>"; 

}