如何在Laravel中处理未选中的复选框?

ibps3vxo  于 2022-11-26  发布在  其他
关注(0)|答案(8)|浏览(143)

我在Laravel中有一个编辑表单,其中有几个复选框。当我选中复选框并更新记录时,它可以正常工作,但如果我取消选中复选框,它不会返回任何值,因此记录不会更新,值在数据库中保持为真。
如何处理Laravel中未选中的复选框?

3gtaxfhh

3gtaxfhh1#

在复选框之前放置一个值为0的隐藏文本框,以便将0值发送到POST数组中。

{{Form::hidden('value',0)}}
{{Form::checkbox('value')}}
ct2axkht

ct2axkht2#

试试这个

<input type="hidden" name="param" value="0">
<input type="checkbox" name="param" value="1">

如果选中复选框=〉服务器获取“1”
否则=〉服务器获取“0”

llmtgqce

llmtgqce3#

mozilla documentation on checkbox开始:
如果在提交表单时复选框未被选中,则不会向服务器提交值来表示其未选中状态(例如,value=unchecked);该值根本不会提交给服务器。
因此,下面的代码就可以达到这个目的:

$isChecked = $request->has('checkbox-name');
jdg4fx2g

jdg4fx2g4#

我能想到的最好方法是使用三元和空合并PHP操作符:

$request->checkbox ? 1 : 0 ?? 0;

如果选中,则返回1;如果未选中或不可用,则返回0

fhity93d

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
njthzxwz

njthzxwz6#

也许您可以检查输入复选框是否存在,如果存在,$value等于输入复选框值,如果不存在,则意味着复选框未被选中,因此$value为false。您还必须添加一个表单请求,以确保输入包含布尔值

$value = $request->has('checkbox') ? $request->input('checkbox') : false
tzdcorbm

tzdcorbm7#

简单地做了

$somestate = 0;

if ($request->has('checkox')) {
    $somestate = 1;

}
syqv5f0l

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

相关问题