当while循环使用PHP创建表行时,如何根据内容更改表单元格的属性


how to change attribute of table cell based on contents when table rows created by while loop with PHP

我是PHP的初学者,只知道基础知识。我想做我的第一件更高级的事情,但一直没能想出怎么做。

我从mysql数据库中获取数据,然后创建一个html表。

while($row = $queryresult->fetch_assoc()) {
echo "<tr><td>".$row['col1']."</td><td>".$row['col2']."</td></tr>";}

我想根据单元格的内容将css类添加到单元格中。所以如果第一行的col1是"foo",那么我想要<td class="foo">如果col1在表的第2行是"bar",那么我想要<td class="bar">

我试过

if ($row['col1'] == "foo") {
        $classvar = " class=foo";
    } elseif ($row['col1'] == "bar") {
        $classvar = " class=bar";
    }
echo "<tr><td".$classvar.">";

但这会根据迭代的第一行将所有行设置为相同的行。因此,如果第一行有col1="foo",那么所有行都有$classvar="class=foo"。如何分别评估每个表行?

根据您的条件将elseif更改为if。

while($row = $queryresult->fetch_assoc()) {
     if ($row['col1'] == "foo") {
         $classvar = " class=foo";
     } 
     if ($row['col1'] == "bar") {
         $classvar = " class=bar";
     }
        echo "<tr><td",$classvar,">",$row['col1'],"</td><td>",$row['col2'],"</td></tr>";
}

将测试放入while循环中。

对于$row['col1']既不是foo也不是bar 的情况,首先将$classvar初始化为零也是一个好主意

保持字符串连接易于阅读的一个好方法是在{$array['key']}周围使用{},这样你就不必一直与点连接

正如其他人提到的,类名必须在""''

while($row = $queryresult->fetch_assoc()) {
    $classvar = '';
    if ($row['col1'] == "foo") {
        $classvar = 'class="foo"';
    } 
    if ($row['col1'] == "bar") {
        $classvar = 'class="bar"' ;
    }
    echo "<tr><td {$classvar}>{$row['col1']}</td><td>{$row['col2']}</td></tr>";
}

更换

echo "<tr><td>",$row['col1'],"</td><td>",$row['col2'],"</td></tr>";

echo "<tr><td ".$classvar.">".$row['col1']."</td><td>".$row['col2']."</td></tr>";

我更喜欢模板化方法:

<?php while($row = $queryresult->fetch_assoc()) { ?>
  <tr>
    <td class="<?=($row['col1'] == "foo") ? 'foo' : 'bar'?>"><?=html($row['col1'])?></td>
    <td><?=html($row['col2'])?></td>
  </tr>
<?php } ?>

首先包括此功能:

function html($str){
  return htmlspecialchars($str, ENT_QUOTES);
}

正如您在上面看到的,我使用的是<?='string'?>的组合,它是<?php echo 'string' ?>的简写。

我还使用了三元运算符:statement ? if_true : if_false