Laravel框架foreach循环下0/1值checkbox存储结果不匹配问题
问题原因
HTML表单提交时,未选中的checkbox不会被提交到后端。你当前为每一项配置了同名为score[]的隐藏字段和复选框:
- 当复选框未选中时,仅提交隐藏字段的
0,对应score数组新增1个元素 - 当复选框选中时,隐藏字段的
0和复选框的1都会被提交,对应score数组新增2个元素
这就导致score数组的总长度 = 总选项数 + 选中选项数,下标和criteria_id数组的下标完全无法对应,才会出现实际存储值和预期不符的交替0、1结果。
解决方案
推荐使用指定显式索引的方案,确保同一条考核项的隐藏字段和复选框共用同一个索引,复选框选中时提交的1会自动覆盖同索引隐藏字段的0:
视图层修改代码
@foreach($criteria as $index => $data) <table> <tr> <td class="col-4"> <input type="hidden" name="criteria_id[{{ $index }}]" value="{{ $data->id }}"> {{ $data->criteria_name}} : </td> <td class="col-2"> <input type="hidden" class="form-control" name="score[{{ $index }}]" value="0"> <input type="checkbox" class="form-control" name="score[{{ $index }}]" value="1"> </td> </tr> </table> @endforeach
控制器层
原有逻辑无需修改,直接按索引取值即可匹配到对应选项的提交值。
内容的提问来源于stack exchange,提问作者mfahmifadh
相关产品推荐
相关产品推荐

