Laravel中POST表单select值获取异常,始终设为true问题求助
问题分析与解决
问题原因
不管用户选择「Public」还是「Private」,$request->input('is_private')都会返回对应的选项值(is_public或is_private),永远不会是null。这导致你写的if (null !== $request->input('is_private'))条件始终成立,所以$event->is_private永远被设置为'true'。
解决方案
你可以通过以下两种方式修复:
方案1:修改HTML选项值(推荐,更贴合布尔逻辑)
把下拉选项的value改成直接对应布尔状态的数值:
<form method="POST" action="{{ route('createEvent') }}"> <label for="is_private">Privacy</label> <select id="is_private" name="is_private" required autofocus> <option value="" disabled selected>-- select one --</option> <option value="0">Public</option> <option value="1">Private</option> </select> </form>
然后在控制器中直接判断赋值:
// 如果数据库字段是字符串类型 $event->is_private = $request->input('is_private') === '1' ? 'true' : 'false'; // 如果数据库字段是布尔类型,更推荐直接存布尔值 $event->is_private = $request->input('is_private') === '1';
方案2:直接判断原选项值(不修改HTML)
保持现有HTML不变,控制器里判断具体的选项值:
if ($request->input('is_private') === 'is_private') { $event->is_private = 'true'; } else { $event->is_private = 'false'; }
内容的提问来源于stack exchange,提问作者Guilherme Moreira
相关产品推荐
相关产品推荐

