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

PHP实现SQL结果按子分类生成Div,无数据分类也需创建

解决方案

要实现即使子分类无视频也生成对应div的需求,核心思路是先明确所有需要展示的子分类列表,再逐个为每个子分类生成容器,最后将对应视频填充进去。具体步骤如下:

1. 准备子分类列表

你可以选择两种方式获取子分类:

  • 如果是固定的4个子分类,直接定义数组;
  • 如果子分类是动态的(可能新增),从数据库查询该主分类下所有存在的子分类。

2. 按子分类分组视频数据

把查询到的视频按子分类归类,方便后续快速查找对应分类的视频。

3. 遍历子分类生成容器

逐个为每个子分类创建div,再填充该分类下的视频(无视频时可添加提示)。

修改后的完整代码

<?php
// 1. 查询该主分类下的所有视频
$stmt = $conn->prepare("SELECT * FROM VIDEOS WHERE categorie=:category ORDER BY categorie ASC, subcategorie ASC");
$stmt->bindParam(':category', $_POST['category']);
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);

// 2. 获取需要展示的所有子分类(二选一)
// 方式一:固定子分类(适合已知只有4个的情况)
// $requiredSubcategories = ["子分类1", "子分类2", "子分类3", "子分类4"];

// 方式二:从数据库动态获取该主分类下的所有子分类
$stmtSubcats = $conn->prepare("SELECT DISTINCT subcategorie FROM VIDEOS WHERE categorie=:category ORDER BY subcategorie ASC");
$stmtSubcats->bindParam(':category', $_POST['category']);
$stmtSubcats->execute();
$requiredSubcategories = $stmtSubcats->fetchAll(PDO::FETCH_COLUMN, 0);

// 3. 将视频按子分类分组
$videosBySubcat = [];
foreach ($result as $video) {
    $subcat = $video["subcategorie"];
    if (!isset($videosBySubcat[$subcat])) {
        $videosBySubcat[$subcat] = [];
    }
    $videosBySubcat[$subcat][] = $video;
}

// 4. 遍历子分类生成容器和内容
foreach ($requiredSubcategories as $subcat) {
    // 输出子分类容器
    echo "<div class='subcategory_container active' id='" . htmlspecialchars($subcat) . "'>";
    echo "<h3 class='subcategory_title'>" . htmlspecialchars($subcat) . "</h3>";
    
    // 检查该子分类是否有视频
    if (isset($videosBySubcat[$subcat]) && !empty($videosBySubcat[$subcat])) {
        // 输出该分类下的所有视频
        foreach ($videosBySubcat[$subcat] as $video) {
            echo "<div class='video_div'> <iframe width='196' height='350' src='" . htmlspecialchars($video['linkembed']) . "'></iframe></div>";
        }
    } else {
        // 无视频时的提示(可根据需求修改或删除)
        echo "<p style='text-align:center; padding:20px;'>暂无视频</p>";
    }
    
    echo "</div>";
}
?>

关键改进点

  • 强制生成所有子分类容器:不再依赖查询结果中的视频来触发容器生成,而是先确定所有需要展示的子分类,确保每个子分类都有对应的div。
  • 数据分组优化:通过$videosBySubcat数组将视频按子分类归类,避免了原代码中循环判断的冗余逻辑。
  • 安全防护:使用htmlspecialchars()转义输出内容,防止XSS注入风险(新手容易忽略的细节)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 04:55:13