【问题标题】:Coloring table rows considering field value考虑字段值的着色表行
【发布时间】:2011-10-20 20:28:17
【问题描述】:

我正在一个公司网站上工作,您可以在其中检索(通过 MySQL 咨询)一些在 HTML 表中格式化的数据。如果特定字段值是一个或另一个,则尝试更改行颜色时会出现问题。

(部分)代码是:

    $RowCt = 0;
while($Row = mysql_fetch_assoc($Result))
{   
    $timezone = new DateTimeZone( "Europe/London" );
    $date = new DateTime();
    $date->setTimezone( $timezone );
    $ahora = $date->format( 'H:i' ); 

    if ($var == 1) {
        $rowcolor = "red";
    } else if ($var == 0) {
        $rowcolor = "yellow";
    } else {
        $rowcolor = "white";
    }

    //$Table.= "<tr style='background-color:#FFFFFF;'>";

    foreach($Row as $field => $value)
    {                   
        switch ($field) {
            default:
                $Table.= "<td style='font-size:14px; background-color:$rowcolor' align='center'>$value</td>"; 
                break;  
            case a:          
                if ($now > $value) {
                        $var == 0;
                    } else {    
                        // Do nothing
                    }
                $Table.= "<td style='font-size:14px; background-color:$rowcolor' align='center'>$value</td>"; 
                break;
            case b:
                if ($now > $value) {
                        $var == 1;
                    } else {    
                        // Do nothing
                    }
                $Table.= "<td style='font-size:14px; background-color:$rowcolor' align='center'>$value</td>"; 
                break;
            case c:
                switch ($value) {
                    case 1:
                        $Table.= "<td style='font-size:14px; background-color:$rowcolor' align='center'>a</td>";
                        break;
                    case 2:
                        $Table.= "<td style='font-size:14px; background-color:$rowcolor' align='center'>b</td>";
                        break;
                }
            case d:
                switch ($value) {
                    case 3:
                        $Table.= "<td style='font-size:14px; background-color:$rowcolor' align='center'>a</td>";
                        break;
                    case 4:
                        $Table.= "<td style='font-size:14px; background-color:$rowcolor' align='center'>b</td>";
                        break;
                    case 5:
                        $Table.= "<td style='font-size:14px; background-color:$rowcolor' align='center'>c</td>";
                        break;
                    case 6:
                        $Table.= "<td style='font-size:14px; background-color:$rowcolor' align='center'>d</td>";
                        break;
                }
            case e:
                switch ($value) {
                    case "E":
                        $Table.= "<td style='font-size:14px; background-color:$rowcolor' align='center'>a</td>";
                        break;
                    case "I":
                        $Table.= "<td style='font-size:14px; background-color:$rowcolor' align='center'>b</td>";
                        break;
                    case "F":
                        $Table.= "<td style='font-size:14px; background-color:$rowcolor' align='center'>c</td>";
                        break;
                }
        }
    }
$Table.= "</tr>";

当试图在 switch 语句中定义一个值,然后试图使其成为一个条件时,问题就出现了,因此整行都被着色(如果选择了案例 1 并且我们没有准时,则为黄色;如果案例2被选中,我们没有准时)。

【问题讨论】:

  • 你为什么要$var == 0;?赋值运算符是单个=,仅在比较双精度时使用。
  • 您的 switch 语句意义不大。你能描述一下它的含义吗?
  • 另外,您的三个 $Table.= 语句是相同的 - 如果这是重点,请将它们移出您的开关。您可能还想为每个案例添加不同的 $rowcolor...
  • 感谢您的回答。将 $var 更改为单个“=”。 $Table.= 语句是这样定义的,用于打印整个表格的后部 return $Table;
  • $now 和 $value 输出的是什么?试试 var_dump($now) 和 var_dump($value) 看看你的 if 语句是否在做你认为的事情。那么您将知道这两个是否具有可比性。通常,日期字段中的值很奇怪,具体取决于您的数据库服务器的设置方式以及字段的类型。

标签: php mysql html-table


【解决方案1】:

您的代码 sn-p 并没有真正解释太多,但据我所知,我会建议您以不同的方式切换。您的开关正在构建 HTML 输出。

我鼓励使用 switch 来设置 $style 变量中的样式,而且...严格来说,它使用例的逻辑更好:首先是默认值:例如。

switch ($condition) {
  case 1 : $style = 'background:red;'; break;
  case 2 : $style = 'background:yellow;'; break;
  default : $style = 'background:white;';
}

现在构建您的 HTML,例如。

foreach ($results as $row) echo '<tr><td style="'.$style.'">Cell data</td></tr>';

对于switch上的多种情况:

switch ($condition) {
  case 0:
  case 1:
    // Do something
    break;
  case 2: /* Do something */ break;
  default: /* Do something */ break;
}

2 层交换机:

switch ($condition_1) {
  case 0 :
    switch ($condition_2) {
      case 'A' :
      // do something
      break;
    }
  break;
}

不要忘记在两个级别中都进行 BREAK

【讨论】:

  • 这很奇怪。我已经为$var 添加了你的switch,看起来它把它全部涂成黄色(第一种情况),即使条件($var = 0)目前不正确。不幸的是,对于下面的多重定义,我需要该 switch 语句。
  • 嗨,alex,我在 switch 中添加了多个 case 的用法示例,switch 总是使用第一种 case 有点奇怪。我会检查并确保您使用的是 BREAK;在每个案例之后,并确保您知道 $var 的值
  • 根据您的编辑,您有一个 2 层嵌套开关,第 1 层不是 BREAK-ing,第 2 层是...
  • 嗯。为两种情况下的第一个嵌套开关添加了break;,并且仍然将其全部绘制为黄色。在第一次切换之前也尝试global $var;,以防它没有正确导出,但不知道。
  • 测试着色并制作$var = 1,现在它将除第一行(应该绘制的那一行)以外的所有内容都绘制为黄色。 (考虑到修改后的代码,$var = 1; 表示黄色,$var = 2; 表示红色;if ($var == 1) { $rowcolor = "yellow"; } else if ($var == 2) { $rowcolor = "red"; } else { $rowcolor = "white"; } 看起来它无法正确识别 $var
猜你喜欢
  • 2017-11-05
  • 2020-03-22
  • 2015-09-16
  • 1970-01-01
  • 2016-12-30
  • 1970-01-01
  • 1970-01-01
  • 2013-03-09
  • 1970-01-01
相关资源
最近更新 更多