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
相关产品推荐
相关产品推荐

