2014-04-01 44 views
2

這是一個代碼。 這將從數據庫中動態加載所有標題部分(即表格標題)。PHP MYSQL關聯數組和表

下面的代碼工作正常。但是列不匹配。 即標題的第一行第一列是空白的,並且表中存在錯位。

代碼

<table border="1"> 
    <?php 
    $book_query = mysql_query("select * from book_master"); 
    $i = 0; 
    while($row = mysql_fetch_assoc($book_query)) 
    { 

      $columns = array_keys($row); 
      ?> 
      <th> 
       <?php 
       foreach($columns as $column) 
       { 
       ?> 
        <td><?php echo $column; ?> </td> 

      </th> 
      <?php 
     } 
     ?> 
     <tr> 
      <?php 
      foreach($row as $key=>$value) 
      { 
       ?> 
       <td><?php echo $value; ?></td> 
       <?php 
      } 
      ?> 
     </tr> 
     <?php 
     $i++; 
    } 
    ?>   
    </table> 

編輯:

這裏是我的print_r($columns)值:

Array ([0] => Author Name [1] => Book Name [2] => Rating [3] => Location) 

我知道這個問題是與循環。有人可以幫我嗎?

+1

這是可怕的代碼 - 你應該分開數據處理和輸出。你在這裏生成無效的HTML - 你正在將'td'元素放入'th'元素中; _both_屬於一個'tr',而不是相互嵌套。 – CBroe

+0

CBroe - 現在它的工作很好。我已經改變了到tr。現在它沒事了。是的,正如你所說 - 可怕的代碼。 ;) – user3350885

+0

不推薦使用mysql擴展。新代碼應該使用mysqli或PDO,它們都具有重要的優點,例如支持預處理語句。另外,除非您正在編寫數據庫管理程序,否則請勿使用['SELECT *'](http://stackoverflow.com/q/321299/);只選擇你需要的列。 – outis

回答

1

希望這會幫助別人。 只是我用TR替換了TH標籤,輸出完美。

<table border="1"> 
    <?php 
    $book_query = mysql_query("select * from book_master"); 

    while($row = mysql_fetch_assoc($book_query)) 
    { 

    $columns = array_keys($row); 
    ?> 
    <tr> 
    <?php 
    foreach($columns as $column){ ?> 
    <td><?php echo $column; ?> </td> 
    <?php } ?> 
    </tr> 

    <tr> 
    <?php 
    foreach($row as $key=>$value){ ?> 
    <td><?php echo $value; ?></td> 
    <?php } ?> 
    </tr> 


    </table> 
1

只是刪除TH標籤,因爲它創建一個額外的電池,讓您的佈局搞砸

<table border="1"> 
    <?php 

    $book_query = mysql_query("select * from book_master"); 
    $i = 0; 
    while($row = mysql_fetch_assoc($book_query)) 
    { 
    if($i == 0){ 
    $columns = array_keys($row); 
    ?> 
    <?php 
    foreach($columns as $column){ ?> 
    <td><?php echo $column; ?> </td> 
    <?php } ?> 
    <?php } ?> 
    <tr> 
    <?php 
    foreach($row as $key=>$value){ ?> 
    <td><?php echo $value; ?></td> 
    <?php } ?> 
    </tr> 
    <?php 
    $i++; 
    } 
    ?>   
    </table> 
2

你可以嘗試改變

  <th> 
      <?php 
      foreach($columns as $column) 
      { ?> 
       <td><?php echo $column; ?> </td> 
      <?php 
      } 
      ?> 
     </th> 

 <tr> 
      <?php 
      foreach($columns as $column) 
      { ?> 
       <th><?php echo $column; ?> </th> 
      <?php 
      } 
      ?> 
     </tr>