如何让PHP服务器正确接收嵌套数组形式的多选表单值?
解决多选框
search[cpuUsage[]]无法在PHP中获取全部选中值的问题 直接给你解决方案:把HTML里的字段名从search[cpuUsage[]]改成search[cpuUsage][],PHP就能正确解析所有选中的多选值了。
为什么原来的写法会失效?
PHP对表单数组的解析有明确规则:要让字段值被识别为数组元素,[]必须放在数组键的末尾,不能嵌套在键名里。
- 你原来写的
search[cpuUsage[]],PHP会把它当成$_POST['search']下一个键为cpuUsage[]的单个值——所以多选时只会保留最后一次选中的选项。 - 改成
search[cpuUsage][]后,PHP会明白search是一个数组,其中的cpuUsage也是一个数组,所有选中的选项都会被依次存入$_POST['search']['cpuUsage']这个数组中。
修改后的完整HTML代码
<select multiple="multiple" name="search[cpuUsage][]" id="search_cpu_usage" class="form-control"> {% for statu in status %} <option value="{{ statu }}">{{ statu }}</option> {% endfor %} </select>
关于jQuery Serialize的说明
不用担心里边的兼容性,修改后的字段名会被jquery.serialize()正确处理,生成类似这样的请求参数:search[cpuUsage][]=value1&search[cpuUsage][]=value2&search[cpuUsage][]=value3
PHP端直接通过$_POST['search']['cpuUsage']就能拿到所有选中值的数组,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Tlaloc-ES
相关产品推荐
相关产品推荐

