将复选框值从视图传递到控制器

时间:2017-07-03 11:26:13

标签: laravel laravel-5

如何将视图中的复选框值传递给控制器​​,以便我可以比较已检查/未检查的值(用于数据库更新)?

查看:

@foreach ($second as $sec)
    <br>
    <div class = "form-group">
        {{$sec->Roll }}
        &nbsp&nbsp&nbsp&nbsp
        {{ $sec->Name}}
    </div>
    <div class = "form-group">
        <input tabindex="1" type="checkbox" value="{{$sec->Roll}}"  name="1" />
    </div>
@endforeach

控制器:

foreach ($columns as $col) {
    //dd("Y");
    if($col == $txt[1]) {
        $got=DB::table($req)->select($col)->get();
        //dd($got);
        //COMPARE CHECKBOX VALUE "CHECKED/UNCHECKED" WITH ITS DEFAULT VALUE 
        DB::statement("UPDATE " . $req . " set " . $got . " to " . $got . " + 1 WHERE" .$req->Roll . " IN ".( implode(',', $req)));
    }
}

1 个答案:

答案 0 :(得分:0)

  

Ps:这可能只适用于我的描述符合您要做的事情,因为您的问题似乎如此。

我做的一种方法是不在checkbox元素中添加任何值。然后检查返回的值是否是带有is_string($ the_variable)的字符串。也就是说,而不是:

<input tabindex="1" type="checkbox" value="{{$sec->Roll}}"  name="checkbox_1"  />

我会:

 <input tabindex="1" type="checkbox"  name="checkbox_1"  />

这可能不是一个理想的解决方案,但如果您尝试过它会有点好奇。 因此,在控制器中,任何选中的复选框都会打开&#39;作为值,虽然未选中,但会有null:

所以,如果我在我的控制器中:

return request()->all();

我应该将已选中的值设为&#39; on&#39;以及未选中的值null

所以我会在控制器中做到这一点:

if(is_string(request()->get('checkbox_1))) {
    //checked
else {
    // unchecked
}

希望现在很清楚。

只是为了更新:

另一种方法是在制作foreach时传递要更新的列的键,这样你就会有这样的事情:

@foreach ($second as $key=> $sec) 

然后在复选框上它将作为不同的名称:

<input tabindex="1" type="checkbox" name="{{ $key }}" /> 

这样,如果您在控制器的第一个处返回request()->all();,则可以判断是否有其他错误。

请务必记下该foreach()中的$key,以确保您做的正确。