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

PHP <select><option>选中项重复显示问题求助

问题分析与解决

你的代码出现<option>重复显示的核心原因是重复输出了同一个选项:

  • 你用foreach ($row as $option)遍历当前title行的所有字段,当字段值匹配$dbselected时,输出一个带selected的选项;
  • 紧接着在foreach循环外,又无条件输出了同一个title的选项,导致每个匹配的选项都会被打印两次。

另外,遍历整行字段的逻辑完全没必要——你只需要对比当前title的id和$tao['title_id']即可判断是否需要选中。

修正后的代码

<?php
$title_sql = "SELECT * FROM titles";
echo "<select class='form-control' name='title_id'>";

if ($result = mysqli_query($conn, $title_sql)) {
    $dbselected = $tao['title_id']; // 把这个变量提到循环外,避免重复赋值
    while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
        // 直接判断当前title的id是否等于选中的id
        $selected = ($row['id'] == $dbselected) ? 'selected' : '';
        // 只输出一次选项,动态添加selected属性
        echo "<option {$selected} value='{$row['id']}'>{$row['title']}</option>";
    }
    mysqli_free_result($result);
}
echo "</select>";
?>

关键修改点

  • 把$dbselected = $tao['title_id']移到while循环外,避免每次循环重复赋值,提升效率;
  • 移除多余的foreach循环,直接通过$row['id']和选中ID对比;
  • 使用三元运算符动态生成selected属性,每个title只输出一个<option>,彻底解决重复问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 03:40:22