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

PHP双脚本配合实现商品图片与信息关联展示的问题求解

问题根因

你原来的脚本存在两个核心逻辑错误导致输出异常:

  1. 数据库查询语句放在了while循环内部,每次循环都会重新执行查询重置结果集,导致永远只返回第一条商品数据
  2. 图片读取逻辑是遍历整个上传目录输出所有图片,没有和当前遍历的商品name字段做关联匹配,导致所有商品展示的图片完全一致
修正后完整可运行代码
<?php
// 数据库连接、查询逻辑放在最外层,仅执行一次
require_once("db_connect_mysqli.php");
$sql = "SELECT * FROM produits";
$result = mysqli_query($conn, $sql);
$imageDir = "upload/";
?>
<div class="bloq">
<?php while ($row = mysqli_fetch_array($result)): ?>
    <table>
        <tr>
            <td>
                <?php
                // 根据当前商品name匹配对应图片,支持任意常见图片后缀
                $matchedImages = glob($imageDir . $row['name'] . ".*");
                if (!empty($matchedImages)) {
                    $imagePath = htmlspecialchars($matchedImages[0]);
                    echo '<img src="'.$imagePath.'" alt="'.htmlspecialchars($row['name']).'">';
                }
                ?>
            </td>
        </tr>
        <tr>
            <td>
                <?php
                $desc = $row['name'];
                echo chunk_split($desc,45,"<br/>");
                ?>
            </td>
        </tr>
        <tr>
            <td>
                <?php echo htmlspecialchars($row['price']).'€'; ?>
            </td>
        </tr>
    </table>
<?php endwhile; ?>
</div>
<?php
// 释放资源
mysqli_free_result($result);
$conn = null;
?>
核心修改说明
  • 调整了数据库查询的执行位置,避免循环内重复查询重置结果集
  • 替换了全目录遍历的图片读取逻辑,通过glob函数直接匹配和当前商品name一致的图片,保证商品和图片一一对应
  • 修正了原代码中HTML标签开闭不匹配的错误(<td>后错写</th>的问题)
  • 增加了特殊字符转义处理,避免XSS安全风险,同时增加图片存在性判断,避免无对应图片时的404错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 21:57:01