2014-01-23 4 views
2

это мой первый пост - так что будьте осторожны! Я пишу небольшой код php, который отображает таблицу; ось 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 |  | | 

не может понять, хороший способ закрывая таблицу, сохраняя при этом точный динамический контент. Код для таблицы приводится ниже (это отсутствует столбец имени хоста кстати):

<?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 и /тр тегов в то время как петля
  3. добавить ELSEIF для того, когда $ row2 [ «состояние»] пустая строка. в этом случае вывод должен быть & nbsp; вместо пустой строки
+0

Точка 3 очень полезна, спасибо - что-то я не рассматривал (на данный момент мои данные полностью заполнены). – user3229731

Смежные вопросы