【问题标题】:PHP Laravel - how to test if a checkbox is checked, if the value is a variable?PHP Laravel - 如何测试复选框是否被选中,如果值是变量?
【发布时间】:2014-08-09 14:04:58
【问题描述】:

我是 Laravel 的菜鸟,所以请多多包涵。

我正在继续处理一个朋友的网页,该网页显示了一个项目列表(每个项目旁边都有一个复选框)。有很多方法可以与所述项目进行交互,例如“删除”、“更新”,以及我正在处理的“下载”。每行/项目/复选框都有一个删除按钮,因此用户可以轻松地删除一个项目。还有一个批量删除选项,用户可以在其中检查多行,选中“删除”复选框,然后单击“更新”。该网页将数据存储在mongodb上。

假设用户选中该框,单击“下载”,然后为用户创建并下载文件。

但我还没有进入那部分。现在我什至无法检查复选框是否被选中。

这是我的代码:

下载按钮:

<div class="col-md-1 col-md-offset-1">
    {{ Form::open( array(
            'url'    => 'contents/download',
            'role'   => 'form',
            'method' => 'POST',
            'class'  => 'form-inline'
        )
    ) }} 
    <div class="form-inline" role="form">
        <div class="form-group">
            <input type="submit" class="btn btn-success" name="download" id="download" value="Download Selected">
        </div>
    </div>
    {{ Form::close() }} 
</div>

这里是复选框/项目的行。请注意,复选框的值是一个变量 - 它对应于数据库中项目的 ID。

@foreach($children as $child) 
    @if($mother->id == $child->mother_id) 
        <tr>
            <td class="text-center">
                {{--*/ $child->id /*--}}
                <input type="checkbox" class="child" value="{{ $child->id }}" onclick=isSelected(this)>
           </td>

           <td>
               &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="glyphicon glyphicon-file"></span>
               <a href="{{ url($child_url) }}">{{ ucwords($child->child) }}</a>
           </td>
           <td class="text-center">
               Coder
           </td>
           <td class="text-center">
               {{ $child->updated_at }} 
           </td>
           <td class="text-center">
               {{ Form::open(array(
                       'url'    => 'contents/delete',
                       'role'   => 'form',
                       'method' => 'POST',
                       'class'  => 'form-inline'
                   )
               ) }}
               <input type="hidden" value="{{ $child->id }}" name="id">
               <input type="submit" class="btn btn-danger btn-xs" name="deleteChild" value="Delete" onclick="return confirmDelete();" />
               {{ Form::close() }} 
            </td>
        </tr>
    @endif
@endforeach

控制器代码:

public function postDownload()
{
    $input = Input::all();
    if(Input::has("child"))
    {
        echo $input["child"];
        // Begin download
    }
    else
    {
        echo "none";
        // Error - No Item selected
    }
}

我对 Laravel 的理解充其量只是基本的。我哪里做错了?或者也许还有另一种方法?

【问题讨论】:

  • 总是详细地提出问题。你没有提供你的路线,最上面的下载按钮代码没有意义。请详细说明您的问题。

标签: php checkbox laravel


【解决方案1】:

首先,在 HTML 中,你应该给你的复选框起一个名字,也许类似于 items。

当您提交表单时,Laravel 会获取这些数据。现在如果使用 Input::get('items') 检索输入,

$itemIds = Input::get('items');

你会得到一个数组,它的元素是那些被选中的复选框。这个数组基本上是一个索引数组,结构可以是这样的

array(
    [0] => '1', // item 1 ID
    [1] => '5', // item 5 ID
    [2] => '33' // item 33 ID
)

最后,您可以随心所欲地处理 $itemIds。

顺便说一句,如果您的 UI 中没有选中任何框,则无法通过调用 Input::get('items') 获取数组。因此,最好先调用 Input::has('items') 来检查该字段是否存在。

【讨论】:

    【解决方案2】:

    在您的 HTML 中,以您的项目 ID 为复选框动态命名。 示例 , item1 , item2 等。

    然后在您的控制器中检查类似这样的选定项目

    $items = Item::all();
    
    foreach($items as $item)
    {
        if($request->has('item'.$item->id)){
            // item has been ticked
        }
        else{
           // item was not ticked
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2013-12-08
      • 1970-01-01
      • 1970-01-01
      • 2011-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-12
      相关资源
      最近更新 更多