【问题标题】:PHP table with dynamic content具有动态内容的 PHP 表
【发布时间】:2014-02-14 17:35:00
【问题描述】:

我正在编写一小段显示表格的 PHP 代码; X 轴将显示过去 14 天的窗口,Y 轴将在第一列显示计算机列表,每个日期单元格的内容将显示该日期的计算机状态(示例如下)。

|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);
?>

【问题讨论】:

  • 你能不能也把正在生成的表格贴出来?

标签: php mysql html-table


【解决方案1】:

您需要将

部分放入循环中。 TR 是行。你把所有东西都放在一行上。
while (...)
{
   echo "<tr>";
   ...
   echo "</tr>";
}

【讨论】:

  • 谢谢老兄!比预期容易:D
【解决方案2】:

您需要遍历主机:

$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>";
}

【讨论】:

    【解决方案3】:

    有你的问题:

    1. thead 替换为 table
    2. 你应该把 tr/tr 标签放在 while 循环中
    3. $row2['state'] 为空字符串时添加 elseif。在这种情况下,输出应该是   而不是空字符串

    【讨论】:

    • 第 3 点非常有用,谢谢 - 我没有考虑过(此时,我的数据已完全填充)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    • 2014-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-06
    • 1970-01-01
    相关资源
    最近更新 更多