MySQL查询结果表格显示异常:仅1条数据在表内,其余在表外
问题分析与修复方案
我帮你找到了几个导致表格显示异常的核心问题,咱们一步步来解决:
问题根源拆解
tbody标签位置错误:你把<tbody>放在了while循环内部,这意味着每循环一行数据就会生成一个新的tbody容器,浏览器解析时会因为表格结构混乱,把后续行的内容“挤”到表格外面。一个标准表格应该只有一个tbody(或按需多个,但绝不该每行一个)。- thead标签嵌套错误:多个
<th>标签里错误地用了</td>来闭合,比如<th><b>nama atahun</b></td></th>,这种错误的标签嵌套会直接破坏整个表格的DOM结构。 - 多余的闭合标签:循环结束后多写了一个
</table>,导致表格结构冗余混乱。 - 冗余代码块:
while循环里多了一对不必要的{},虽然不影响语法,但会增加代码混乱度。
修复后的完整代码
<?php $servername = "localhost"; $username = "root"; $password = ""; $dbname = "tata_kota1"; $conn = new mysqli($servername, $username, $password, $dbname); if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } $sql = "SELECT * from laporan_gini"; $result = $conn->query($sql); // 先输出表格头部、thead,以及唯一的tbody起始标签 echo "<table border='1'> <thead> <tr> <th>Nomor</th> <th><b>tipe variabel</b></th> <th><b>variabel turunan</b></th> <th><b>nama atahun</b></th> <th><b>turunan tahun</b></th> <th><b>data_content</b></th> <th><b>vertical variabel</b></th> </tr> </thead> <tbody>"; if ($result->num_rows > 0) { while($row = $result->fetch_assoc()) { echo "<tr>"; echo "<th>".$row['id']."</th>"; echo "<td>".$row['nama_variabel']."</td>"; echo "<td>".$row['nama_variabel_turunan']."</td>"; echo "<td>".$row['nama_tahun']."</td>"; echo "<td>".$row['nama_turunan_tahun']."</td>"; echo "<td>".$row['data_content']."</td>"; echo "<td>".$row['nama_item_vertical_variabel']."</td>"; echo "</tr>"; } } else { // 无数据时,让提示文本跨整个表格宽度显示,布局更美观 echo "<tr><td colspan='7'>0 results</td></tr>"; } // 统一闭合tbody和整个表格 echo "</tbody></table>"; ?>
修复细节说明
- 把
<tbody>移到while循环外面,确保所有数据行都放在同一个tbody容器里,符合HTML表格的标准结构。 - 修正了thead里所有
<th>的闭合标签,把错误的</td>全部替换为</th>,保证标签嵌套完全正确。 - 移除了多余的
</table>标签,只保留一个正确的表格闭合标签。 - 去掉了
while循环里冗余的大括号,让代码更整洁易读。 - 优化了无数据时的提示显示,用
colspan='7'让提示文本铺满整个表格行,避免布局错位。
这样修改后,所有数据应该都会正确显示在表格内部了,结构逻辑和标准Bootstrap表格保持一致,浏览器能正常解析表格的DOM结构。
内容的提问来源于stack exchange,提问作者Ade Guntoro
相关产品推荐
相关产品推荐

