2014-01-23 65 views
2

這是我的第一篇文章 - 所以要溫和!我正在寫一小段代碼,它將顯示一個表格; X軸將顯示最近14天的窗口,Y軸將顯示第一列中的計算機列表,每個日期單元格的內容將顯示該日期的計算機狀態(下面的示例)。帶動態內容的PHP表格

|Hostname |1 |2 |3 | 
+-----------+----+---------+ 
|computer1 |OK |DEAD |OK | 
|computer2 |OK |  | | 

我需要的表是完全動態的 - 所以如果今天新增了一個系統,它會顯示並且有今天的狀態,但不會在前一天。到目前爲止好 - 但是我的表是沒有得到正確關閉 - 這樣的計算機狀態越來越垂直加入,而不是水平,所以它看起來更像是這樣的:

|Hostname |1 |2 |3 | 
+-----------+----+---------+ 
|computer1 |OK |  | | 
|computer2 |OK |  | | 
|computer1 |DEAD|  | | 
|computer1 |OK |  | | 

想不通的一個好辦法關閉桌子,同時保持準確,動態的內容。下面是包含表中的代碼(這是BTW缺少hostname列):

<?php 
    $dates2 = mysql_query("SELECT day, month, year, hostname FROM log WHERE date >= DATE_ADD(CURDATE(), INTERVAL -14 DAY) ORDER BY date;"); 
?> 

<?php 
    echo "</thead>"; 
    echo "<tbody>"; 
    echo "<tr>"; 
    while ($row = mysql_fetch_array($dates2)) 
    { 
     echo "<td><a href='/log/" . $row['hostname'] . ".log'>" . $row['hostname'] . "</a></td>"; 
     $state_date = mysql_query("SELECT state FROM log WHERE hostname = '" . $row['hostname'] . "' AND day = '" . $row['day'] . "' AND month = '" . $row['month'] . "' AND year = '" . $row['year'] . "' ORDER BY date;"); 
     while($row2 = mysql_fetch_array($state_date)) 
     { 
      if(isset($row2['state'])) 
      { 
       if ($row2['state'] == 'ok') 
       { 
        echo "<td bgcolor='#FF0000'>" . $row2['state'] . "</td>"; 
       } 
       elseif($row2['state'] == 'dead') 
       { 
        echo "<td bgcolor='#00FF00'>" . $row2['state'] . "</td>"; 
       } 
       else 
       { 
        echo "<td bgcolor='#FFD732'>" . $row2['state'] . "</td>"; 
       } 
      } 
      else 
      { 
       echo "<td>Unknown</td>"; 
      } 
     } 
    echo "</tr>"; 
    } 
    echo "</tbody></table>"; 
    mysql_close($con); 
?> 
+0

你可能也發佈了正在生成的表嗎? –

+0

我現在就添加這個。 – user3229731

回答

2

你需要把<TR>部分內循環。 TR是行。你把所有東西放在一行上。

while (...) 
{ 
    echo "<tr>"; 
    ... 
    echo "</tr>"; 
} 
+0

謝謝兄弟!比預期更容易:D – user3229731

0

你需要通過主機進行迭代:

$hostnames = mysql_query("SELECT DISTINCT hostname FROM log WHERE date >= DATE_ADD(CURDATE(), INTERVAL -14 DAY) ORDER BY date;"); 
while($hostname_row = mysql_fetch_array($hostnames)) 
{ 
    $dates2 = mysql_query("SELECT day, month, year, hostname FROM log WHERE date >= DATE_ADD(CURDATE(), INTERVAL -14 DAY) AND hostname = '" . $hostname_row['hostname'] . "' ORDER BY date;"); 
    echo "<tr>"; 
    while ($row = mysql_fetch_array($dates2)) 
    { 
     if(isset($row2['state'])) 
     { 
      if ($row2['state'] == 'ok') 
      { 
       echo "<td bgcolor='#FF0000'>" . $row2['state'] . "</td>"; 
      } 
      elseif($row2['state'] == 'dead') 
      { 
       echo "<td bgcolor='#00FF00'>" . $row2['state'] . "</td>"; 
      } 
      else 
      { 
       echo "<td bgcolor='#FFD732'>" . $row2['state'] . "</td>"; 
      } 
     } 
     else 
     { 
      echo "<td>Unknown</td>"; 
     } 
    } 
    echo "</tr>"; 
} 
0

有你的問題:

  1. 更換THEAD
  2. 你應該把tr/TR標籤內的while循環
  3. 添加ELSEIF何時$ 2行[ '狀態']爲空字符串。在這種情況下輸出應該是& nbsp;而不是空字符串
+0

第3點是非常有用的,謝謝 - 我沒有考慮過(在這個時候,我的數據完全填充)。 – user3229731