当SQL查询未生成任何行时,HTML无效


HTML not valid when no rows are generated by a SQL query

这是我的代码:

echo '<table class="class1"><tbody>';
while ($row1=mysql_fetch_array($result1)){
 echo '<tr><td>'.$row1['firstname'].'</td><td>'.$row1['lastname'].'</td></tr>';
}
echo '</tbody></table>';

当我使用HTML验证器时,它会返回一个正确的错误"trimming empty <tbody>"。这种情况发生在选择了0行的情况下。因此,代码看起来像<table><tbody></tbody></table>,这并不好。

我正在考虑排除此错误的最佳方法(当有0行或类似的行时,根本不显示此表(,但我不知道如何做到这一点的最佳方法。

在选择显示echo '<table class="class1"><tbody>';之前,如何检查if mysql_num_rows()>0?有更好的主意吗?还是这个好?

使用mysql_num_rows($result)检查查询是否有任何结果。如果为true,则创建一个表+行。否则,什么也不做,或者添加一个替代块:

if (mysql_num_rows($result) > 0) {
    echo '<table class="class1"><tbody>';
    while ($row1=mysql_fetch_array($result1)){
       echo '<tr><td>'.$row1['firstname'].'</td><td>'.$row1['lastname'].'</td></tr>';
    }
    echo '</tbody></table>';
} else { //Optional
    echo '<!-- Anything -->';
}

你的计划非常好。别忘了包括结束echo '</tbody></table>';在您的if检查中。

不确定这是否是最佳实践,但这应该有效:

$string = "";
while ($row1=mysql_fetch_array($result1)){
  $string .= '<tr><td>'.$row1['firstname'].'</td><td>'.$row1['lastname'].'</td></tr>';
}
if ($string!="") {
  echo '<table class="class1"><tbody>';
  echo $string;
  echo '</tbody></table>';
}