【问题标题】:Laravel Blade : Checkbox sends 'null' value to databaseLaravel Blade:复选框将“空”值发送到数据库
【发布时间】:2021-04-19 01:34:27
【问题描述】:

我不明白。我的复选框在选中时会向我的控制器发送一个“空”值。如果它在数据库中,它会回来检查,但是当我取消选中它,然后再次检查它时,我的表单发送一个“空”值我做错了什么?

<div class="col">
  <input type="checkbox" name="staff"   @if($child->staff == 'true') checked @endif >
</div>

【问题讨论】:

  • 您需要提供value,目前没有。
  • 那会是 value="staff" 的名字吗?
  • 您在表中存储单词'true'

标签: html laravel laravel-blade


【解决方案1】:

checked 属性仅确定复选框是否应包含在post 请求中。 value 属性决定了复选框的值是否为checked 并因此包含在表单提交中。

如果您未指定value,并且复选框包含在post 请求中,则其值为on

<input type="checkbox" name="staff" id="staff">

"staff" => "on"

如果你想要一个true 值,你需要设置它。

<input type="checkbox" name="staff" value="true"
    @if($child->staff == 'true') checked @endif>

即使在上面的例子中,复选框的valuetrue,如果不是checked,它将不会包含在提交的表单请求中,所以你有一个false 值(技术上) .

更新

我希望能够在真假之间切换。当我将复选框切换为空时,它仍然将空值传递给数据库。有什么想法吗?

复选框值为strings,因此您需要自己执行转换为所需值,然后将其存储在数据库中。一个可以实现的例子如下:

public function update(Request $request, Staff $staff)
{
    // Perform some validation on the incoming Request
    $request->validate([
        'staff' => ['in:true,false']
    ]);
    
    // Assuming we get here, data is valid
    
    // If the Request object has a key named 'staff'
    // then the checkbox was checked (true).
    // If there is no key named 'staff'
    // then the checkbox was not checked (false)
    $staff->child = $request->has('staff');
}

【讨论】:

  • 你是摇滚明星。但是,我希望能够在真假之间切换。当我将复选框切换为空时,它仍然将空值传递给数据库。有任何想法吗?非常感谢。
  • @Vince 如果您从请求中获取空值,那么您可以将复选框的请求值检查到控制器中,然后将值传递给数据库 $myVar = isset($request->staff == null ) ? if true yourvalue : if false 你的值;
  • @Vince 我添加了一个示例,说明您如何实现您所要求的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-09
  • 2015-08-01
  • 2017-01-29
  • 2021-07-06
  • 2011-11-17
  • 1970-01-01
相关资源
最近更新 更多