You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP循环输出SQL查询结果时HTML表格仅首行CSS生效

问题根源

样式仅第一行生效的核心原因是**</table>闭合标签放错了位置**,你把它写在了遍历PDO结果集的for循环内部:

  • 第一次循环执行时,输出完第一行数据的<tr>,就直接把</table>打印出来了,浏览器解析到这里就会判定表格已经结束
  • 后面循环输出的所有<tr>、<td>全部落在表格标签外部,属于不符合HTML嵌套规则的无效元素,根本匹配不上你为表格内td、th写的CSS规则,自然不会应用样式。

另外代码里还有几个会导致渲染异常的不规范写法:

  • 引入CSS的<link>标签放在了<html>和<head>之间,按照HTML规范,所有外部资源引用必须放在<head>内部
  • <tr>标签里直接写了<br><br>,tr的合法子元素只有td和th,直接插入br属于无效结构,要加行间距直接用CSS的padding控制即可
  • SQL语句直接拼接用户传入的搜索参数,存在SQL注入风险
  • 你写的for循环里$a变量从头到尾没被使用,用while循环遍历结果集更符合常规写法
修复后代码

首先调整PHP结构,把</table>移到循环外,修正所有不规范的地方:

<!DOCTYPE html>
<html>
<head>
    <!-- 样式表引用移到head内 -->
    <link href="styles.css" rel="stylesheet">
    <title>IIACSS search center</title>
</head>
<body>

<form method="post">
<label>Search</label>
<input type="text" name="search">
<input type="submit" name="submit">
</form>

<?php
$con = new PDO("mysql:host=localhost;dbname=data",'root','admin123');
if (isset($_POST["submit"])) {
$str = $_POST["search"];
// 改用参数绑定,避免SQL注入
$sth = $con->prepare("SELECT * FROM `questions` WHERE question LIKE ?");
$searchParam = "%$str%";
$sth->execute([$searchParam]);

$sth->setFetchMode(PDO::FETCH_OBJ);
?>
<table>
  <tr>
    <th>Project</th>
    <th>Question</th>
    <th>Sample</th>
  </tr>
  <?php
  $hasResult = false;
  // 直接用while遍历结果集,删掉循环内的table闭合标签和无效br标签
  while ($row = $sth->fetch()) {
    $hasResult = true;
  ?>
        <tr>
            <td><?php echo $row->Proj_Name; ?></td>
            <td><?php echo $row->Question;?></td>
            <td><?php echo $row->sample;?></td>
        </tr>
  <?php
  }
  // 可选:无搜索结果时显示提示
  if (!$hasResult) {
    echo "<tr><td colspan='3'>未找到匹配记录</td></tr>";
  }
  ?>
<!-- 表格闭合标签移到循环外部 -->
</table>
<?php
}
?>
</body>
</html>

如果要调整表格内容的行间距,直接在CSS里给td/th加内边距即可,不需要在HTML里插入br标签:

body {
  background-color: white;
}

h1 {
  color: black;
}

td {
  color: black;
  font-family: sans-serif;
  padding: 8px 4px; /* 用内边距控制间距,替代无效的br标签 */
}
th {
  color: blue;
  font-family: sans-serif;
  padding: 8px 4px;
}

修复后右键查看页面源码就能看到,所有数据行的tr标签都被包裹在table标签内部,所有行的样式都会正常生效。

内容的提问来源于stack exchange,提问作者oday banihani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 09:33:41