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

PHP数组可读格式输出及表单多选提交值打印异常求助

解决多选表单提交后只显示最后一个选项的问题

嘿,我明白你的问题了——现在不管选多少个选项,提交后只会显示最后一个,对吧?这是因为你提交后直接用了print_r($option['name']),但这个$option是之前遍历$options数组时最后一次循环留下的变量,它只指向最后一个选项的数据,所以自然只会输出最后一个啦。

下面是修正后的代码,能把用户选中的所有选项用普通人看得懂的方式列出来:

修改后的PHP处理部分

<?php 
if(isset($_POST['submit'])) {
    // 先确认用户确实选了选项,且提交的是数组
    if(isset($_POST['mercha_A']) && is_array($_POST['mercha_A'])) {
        echo "<p>你选中的商品类型是:</p>";
        echo "<ul>";
        // 遍历用户选中的每个选项值
        foreach($_POST['mercha_A'] as $selectedValue) {
            // 在选项数组里找到对应的名称
            foreach($options as $option) {
                if($option['value'] === $selectedValue) {
                    // 用htmlspecialchars防止XSS风险
                    echo "<li>" . htmlspecialchars($option['name']) . "</li>";
                    break; // 找到匹配项后就跳出内层循环,提升效率
                }
            }
        }
        echo "</ul>";
    } else {
        // 没选任何选项时给出提示
        echo "<p>你还没有选中任何商品类型哦</p>";
    }
} 
?>

代码说明

  • 首先检查$_POST['mercha_A']是否存在且是数组(多选框提交的参数本来就是数组,这一步是做容错处理)
  • 遍历用户选中的每个value,再回到原始的$options数组中匹配对应的名称,这样就能把所有选中的选项都列出来
  • 用htmlspecialchars()处理输出内容,避免XSS安全问题
  • 增加了未选选项时的提示,体验更友好

另外提个小细节:你的HTML里<td>标签直接放在<form>里,语义上最好包裹在<table>和<tr>里,比如:

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
    <table>
        <tr>
            <td class="container">
                <!-- 下拉框代码不变 -->
            </td>
            <td>
                <button type="submit" name="submit">Submit</button>
            </td>
        </tr>
    </table>
</form>

哈哈,顺便回答你的小问题:要是这个解决方案帮到你了,我倒是很乐意接受一杯咖啡的邀请😉

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:13:34