我在Laravel中有一个编辑表单,其中有几个复选框。当我选中复选框并更新记录时,它可以正常工作,但如果我取消选中复选框,它不会返回任何值,因此记录不会更新,值在数据库中保持为真。如何处理Laravel中未选中的复选框?
3gtaxfhh1#
在复选框之前放置一个值为0的隐藏文本框,以便将0值发送到POST数组中。
{{Form::hidden('value',0)}} {{Form::checkbox('value')}}
ct2axkht2#
试试这个
<input type="hidden" name="param" value="0"> <input type="checkbox" name="param" value="1">
如果选中复选框=〉服务器获取“1”否则=〉服务器获取“0”
llmtgqce3#
从mozilla documentation on checkbox开始:如果在提交表单时复选框未被选中,则不会向服务器提交值来表示其未选中状态(例如,value=unchecked);该值根本不会提交给服务器。因此,下面的代码就可以达到这个目的:
$isChecked = $request->has('checkbox-name');
jdg4fx2g4#
我能想到的最好方法是使用三元和空合并PHP操作符:
$request->checkbox ? 1 : 0 ?? 0;
如果选中,则返回1;如果未选中或不可用,则返回0。
1
0
fhity93d5#
在HTML表单中,当您选中复选框时,它将随POST一起到达,而您没有检查它...所以它在POST中根本不存在。所以你需要检查它是否存在...
if($request->has('input-name')) { $value = $request->input('input-name') } else { $value = "put default value (false)"; } .... do your stuff with the value
njthzxwz6#
也许您可以检查输入复选框是否存在,如果存在,$value等于输入复选框值,如果不存在,则意味着复选框未被选中,因此$value为false。您还必须添加一个表单请求,以确保输入包含布尔值
$value = $request->has('checkbox') ? $request->input('checkbox') : false
tzdcorbm7#
简单地做了
$somestate = 0; if ($request->has('checkox')) { $somestate = 1; }
syqv5f0l8#
我想贡献我的例子(在这个上下文中使用了laravel 9.x和bootstrap 5,但背后的逻辑与其他aswers相同,只是这不会发送两个同名的字段,因为这可能会产生不明确的结果,这取决于PHP解释器最后还是首先读取哪个字段)在我验证规则中,我有这样的内容(我的字段名是“active”):
'active'=>'required|boolean|in:1,0'
所以在刀锋渲染部分我写了这个:
<div class="form-check form-switch"> <input id="active" type="hidden" name="active" value="@if(!empty($record->active)) 1 @else 0 @endif"> <input class="form-check-input" type="checkbox" id="flexSwitchCheckDefault" @checked($record->active) onclick="document.getElementById('active').value=this.checked?1:0"> <label class="form-check-label" for="flexSwitchCheckDefault">Is Active</label> </div>
这样,将始终发送0或1
8条答案
按热度按时间3gtaxfhh1#
在复选框之前放置一个值为0的隐藏文本框,以便将0值发送到POST数组中。
ct2axkht2#
试试这个
如果选中复选框=〉服务器获取“1”
否则=〉服务器获取“0”
llmtgqce3#
从mozilla documentation on checkbox开始:
如果在提交表单时复选框未被选中,则不会向服务器提交值来表示其未选中状态(例如,value=unchecked);该值根本不会提交给服务器。
因此,下面的代码就可以达到这个目的:
jdg4fx2g4#
我能想到的最好方法是使用三元和空合并PHP操作符:
如果选中,则返回
1
;如果未选中或不可用,则返回0
。fhity93d5#
在HTML表单中,当您选中复选框时,它将随POST一起到达,
而您没有检查它...所以它在POST中根本不存在。
所以你需要检查它是否存在...
njthzxwz6#
也许您可以检查输入复选框是否存在,如果存在,$value等于输入复选框值,如果不存在,则意味着复选框未被选中,因此$value为false。您还必须添加一个表单请求,以确保输入包含布尔值
tzdcorbm7#
简单地做了
syqv5f0l8#
我想贡献我的例子(在这个上下文中使用了laravel 9.x和bootstrap 5,但背后的逻辑与其他aswers相同,只是这不会发送两个同名的字段,因为这可能会产生不明确的结果,这取决于PHP解释器最后还是首先读取哪个字段)
在我验证规则中,我有这样的内容(我的字段名是“active”):
所以在刀锋渲染部分我写了这个:
这样,将始终发送0或1