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

