2012-12-27 79 views
0

我有一位客戶要求我修改其中一個腳本以顯示已刪除的文件名稱表。我不允許修改mysql到mysqli,因爲這不是我的網站。使用PHP生成帶有靜態數據庫的MySQL數據的HTML表格

與其將所有內容放在一行並進行分頁,他希望列使信息可以放在一個頁面上。我嘗試了好幾種方法,但沒有人可以正常工作

方法1:顯示的列數正確,但在每一個細胞重複相同的文件名:

$q = "SELECT `name` FROM `files` WHERE `deleted` = 1"; 
$r = mysql_query($q); 
$rows = mysql_num_rows($r); 
$deleted = mysql_fetch_assoc($r); 

// Build table and iterate through the results 
    $end = $rows; // total # of results 
    $t_rows =ceil($end/5); // number of cells per row 
    $x = 0; 
    $start = 0; 

    echo "<table>"; 
    while($x <= $t_rows){ 
     echo "<tr>"; 
     for($y = 0; $y < 5; $y++, $start++){ 
      if($start <= $end){ 
       echo "<td>".$deleted['name']."</td>"; 
      } 
     } 
     echo "</tr>"; 
     $x++; 
    } 
    echo "</table>"; 

方法2:顯示正確數量的列,但每行都重複一個文件名5x。 (例如,第1行具有第一個記錄的名稱5次,第2行,第2個文件的名稱等)。

$q = "SELECT `name` FROM `files` WHERE `deleted` = 1"; 
$r = mysql_query($q); 
$rows = mysql_num_rows($r); 

// Build table and iterate through the results 
    $end = $rows; // total # of results 
    $t_rows =ceil($end/5); // number of cells per row 
    $x = 0; 
    $start = 0; 

    echo "<table>"; 
    while($x <= $t_rows){ 
     echo "<tr>"; 
     while($deleted = mysql_fetch_assoc($r)){ 
      for($y = 0; $y < 5; $y++, $start++){ 
       if($start <= $end){ 
        echo "<td>".$deleted['name']."</td>"; 
       } 
      } 
      echo "</tr>"; 
      $x++; 
     } 
    } 
    echo "</table>"; 

在此先感謝

回答

0

這種修修補補的最後幾天,我想出了一個解決方案後, :

// Build table and iterate through the results 
$int = 1; 

echo "<table>"; 
while($deleted = mysql_fetch_assoc($r)){ 
    if($int%5==1){ 
     echo "<tr>"; 
    } 

    echo "<td>".htmlspecialchars($deleted['name'])."</td>"; 

    if($int%5==0){ 
     echo "</tr>"; 
    } 
    $int++; 
} 
echo "</table>"; 
+0

請注意添加'htmlspecialchars()' - 必須防止XSS攻擊。 – gahooa

+0

請注意,mysql_ *函數已棄用。使用MySQLi或PDO代替 – Timr

+0

@gahooa - 感謝這些信息,但是您認爲有必要擔心這種攻擊,因爲頁面通過會話控制檢查被鎖定,並且沒有數據通過$ _GET傳遞?另外,沒有其他站點可以交互或將數據傳遞給腳本本身的API。 – rws907

0
$q = "SELECT `name` FROM `files` WHERE `deleted` = 1"; 
$r = mysql_query($q); 

// Build table and iterate through the results 
$cols = 5; //number of columns 
$x = 0; 

echo "<table>"; 
while($deleted = mysql_fetch_assoc($r)){ 
    if($x % $cols == 0) echo '<tr>'; // when $x is 0, 5, 10, etc. 
    echo "<td>".$deleted['name']."</td>"; 
    if($x % $cols == $cols-1) echo "</tr>"; // when x is 4, 9, 14, etc. 
    $x++; 
} 
if($x%$cols!=0) echo "</tr>"; // add a closing </tr> tag if the row wasn't already closed 
echo "</table>"; 

(這是未經測試,但我認爲它會工作)

+0

沒有這樣的運氣。使用這個我什麼也沒有顯示在屏幕上。感謝您的幫助。 – rws907

相關問題