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

PHP循环无法重复HTML元素:仅显示数据库首条记录求助

解决PHP循环渲染商品模板仅显示第一条记录的问题

嘿,这问题很常见,我一眼就瞅到问题所在了——你的HTML结构嵌套错误!

看你的代码:while循环里打开了<div class="itemTemplate">,但闭合标签</div>却写在了循环外面。这就导致所有从数据库拉取的记录都被塞进了同一个itemTemplate容器里,浏览器解析DOM的时候就会出现结构混乱,最终只显示第一条记录(或者其他异常情况)。

修正后的代码

把</div>移到while循环的闭合花括号内部,让每一条记录都对应一个独立的itemTemplate容器:

<!DOCTYPE html>
<html lang="en">
<head>
<script src="https://kit.fontawesome.com/9114d9acc8.js" crossorigin="anonymous">
</script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="includes/navbar/navbar.css">
<link rel="stylesheet" href="css/style.css">
<title>Document</title>
</head>
<body>
<?php include "includes/navbar/navbar.php"; ?>
<?php require 'includes/dbh.php';
$query = sprintf('SELECT * FROM produce');
$result = mysqli_query($conn, $query);
// 可以加个错误排查,确认查询是否成功
if (!$result) {
    echo "数据库查询错误: " . mysqli_error($conn);
    exit;
}
while ($row = mysqli_fetch_assoc($result)) { ?>
<div class="itemTemplate">
<a id="title" href="register.php"><?php echo $row['Name'] ?></a>
<a href=""><img src="<?php echo $row['img'] ?>" alt="<?php echo $row['Name'] ?>"></a>
<span>Price: £<?php echo $row['Price'] ?></span>
<div class="flex-b">
<label for="">Quantity:</label>
<select name="" id="">
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
<option>6</option>
<option>7</option>
<option>8</option>
</select>
<a href="signIn.php"><i class="fas fa-shopping-basket"></i></a>
</div>
</div> <!-- 把这个闭合标签移到循环内部 -->
<?php } ?>
</body>
</html>

额外排查建议

  • 先确认数据库的produce表中确实存在多条记录,避免是数据本身的问题
  • 可以用echo mysqli_num_rows($result)输出查询返回的记录数,确认PHP确实拉取到了多条数据
  • 保留代码中的查询错误捕获逻辑,能快速定位SQL语法或数据库连接类的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:25:38