PHP+HTML+MySQL表格填充异常:仅首条数据正常显示
解决你的表格记录显示问题
嘿,这个问题我之前踩过坑!大概率是你循环生成表格行的时候,<tr>标签的开闭位置出错了——导致只有第一条记录被正确包裹进表格行,剩下的内容因为找不到对应的<tr>容器,被浏览器自动解析到表格外面去了。
先结合你给出的代码片段,推测你可能的错误写法:
<?php session_start(); $link = mysqli_connect("localhost", "root", "root") or die(mysqli_error($db)); mysqli_select_db($link, "keepers") or die(mysqli_error($link)); $query = "SELECT id, name FROM suppliers"; $result = mysqli_query($link, $query); ?> <table border="1"> <tr> <th>供应商名称</th> </tr> <?php // 错误逻辑:<tr>只在循环外打开一次 echo "<tr>"; while($row = mysqli_fetch_assoc($result)){ echo "<td><a href='supplier_detail.php?id={$row['id']}'>{$row['name']}</a></td>"; } echo "</tr>"; ?> </table>
正确的写法应该是这样:
把<tr>的打开和闭合都放到while循环内部,确保每一条数据库记录都对应一个独立的表格行:
<?php session_start(); $link = mysqli_connect("localhost", "root", "root") or die(mysqli_error($db)); mysqli_select_db($link, "keepers") or die(mysqli_error($link)); $query = "SELECT id, name FROM suppliers"; $result = mysqli_query($link, $query); ?> <table border="1"> <thead> <tr> <th>供应商名称</th> </tr> </thead> <tbody> <?php if(mysqli_num_rows($result) > 0){ // 每循环一次就生成一个完整的<tr> while($row = mysqli_fetch_assoc($result)){ echo "<tr>"; // 用htmlspecialchars转义内容,避免XSS和HTML解析错误 echo "<td><a href='supplier_detail.php?id={$row['id']}'>" . htmlspecialchars($row['name']) . "</a></td>"; echo "</tr>"; } } else { // 没有数据时显示友好提示 echo "<tr><td colspan='1'>暂无供应商记录</td></tr>"; } ?> </tbody> </table>
额外优化提醒:
- 一定要用
htmlspecialchars()转义输出的数据库内容,不然如果供应商名称里包含<、>这类特殊字符,会直接破坏HTML结构,甚至引发XSS安全问题。 - 记得处理查询结果为空的情况,避免出现空表格,提升用户体验。
- 后续可以尝试用mysqli面向对象写法或PDO,代码会更简洁易维护,也能减少这类语法错误的概率。
内容的提问来源于stack exchange,提问作者ESuth
相关产品推荐
相关产品推荐

