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

如何用PHP+HTML实现供应商对应供应分类的下拉选择框?

实现供应商-分类关联的下拉选择框

没问题,我来帮你搞定这个需求!首先咱们得先明确两张表的关联逻辑,假设你的表结构大概是这样的(如果和你的实际字段不符,直接替换成你的字段名就行):

  • tbl_supplier:包含supplier_id(主键)、supplier_name(供应商名称)
  • tbl_categories:包含category_id(主键)、category_name(分类名称)、supplier_id(外键,关联供应商表的supplier_id)

接下来分三步实现:

1. PHP 数据库连接与数据处理

首先咱们用PHP连接数据库,查询并整理出每个供应商对应的分类列表:

<?php
// 数据库配置信息
$host = 'localhost';
$dbname = 'your_database_name';
$username = 'your_username';
$password = 'your_password';

// 连接数据库
$conn = new mysqli($host, $username, $password, $dbname);

// 检查连接是否成功
if ($conn->connect_error) {
    die("数据库连接失败: " . $conn->connect_error);
}

// 查询供应商及其关联的分类,用GROUP_CONCAT把分类名称拼接成字符串
$sql = "
    SELECT s.supplier_id, s.supplier_name, GROUP_CONCAT(c.category_name SEPARATOR ', ') AS categories
    FROM tbl_supplier s
    LEFT JOIN tbl_categories c ON s.supplier_id = c.supplier_id
    GROUP BY s.supplier_id, s.supplier_name
    ORDER BY s.supplier_name
";

$result = $conn->query($sql);

// 整理成数组:键为供应商ID,值为"供应商名称 > 分类列表"的字符串
$supplierCategories = [];
if ($result->num_rows > 0) {
    while ($row = $result->fetch_assoc()) {
        // 如果供应商没有分类,显示"无分类"
        $categoriesText = !empty($row['categories']) ? $row['categories'] : '无分类';
        $supplierCategories[$row['supplier_id']] = $row['supplier_name'] . ' > ' . $categoriesText;
    }
}

// 关闭数据库连接
$conn->close();
?>

2. HTML 下拉选择框渲染

接下来把整理好的数据渲染成下拉选择框:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>供应商分类选择</title>
</head>
<body>
    <label for="supplier-select">选择供应商及分类:</label>
    <select id="supplier-select" name="supplier_id">
        <option value="">-- 请选择 --</option>
        <?php if (!empty($supplierCategories)): ?>
            <?php foreach ($supplierCategories as $id => $text): ?>
                <option value="<?php echo htmlspecialchars($id); ?>">
                    <?php echo htmlspecialchars($text); ?>
                </option>
            <?php endforeach; ?>
        <?php else: ?>
            <option value="">暂无数据</option>
        <?php endif; ?>
    </select>
</body>
</html>

关键说明

  • 用GROUP_CONCAT函数可以直接在SQL里把同一个供应商的分类拼接成逗号分隔的字符串,省得PHP里再循环拼接,效率更高。
  • 使用htmlspecialchars()转义输出内容,避免XSS安全问题,这个一定要记得加!
  • 如果有的供应商没有关联任何分类,用LEFT JOIN会保留这些供应商,然后我们显示"无分类",避免遗漏数据。
  • 你可以根据实际需求调整下拉框的value值,比如如果需要传递分类ID的话,可能需要调整数据结构,但目前的写法是最贴合你示例的需求的。

内容的提问来源于stack exchange,提问作者John Jerick Sorio

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:59:02