【问题标题】:POST multiple fields with same name in Laravel在 Laravel 中发布多个具有相同名称的字段
【发布时间】:2019-05-10 21:43:13
【问题描述】:

我正在尝试创建一个购物车,我想发布多个具有相同名称的字段并处理它们

<?php foreach($datacart as $datacart) { ?>
<form method="post" action="/update-cart">

<input type="hidden" name="rowid" value="{{$datacart->rowid}}">
<input type="text" name="quantity" value="{{$datacart->quantity}}">

 <?php }>

<input type="submit" value="update">

</form>


public function update_cart(request $request){

   $rowId = $request->rowid;
   $quantity = $request->quantity;



   Cart::update($rowId, $quantity);

}

首先使用 foreach 显示所有产品。然后每个项目都有一个隐藏的rowid和一个数量。

下面的代码显示了我的控制器。但是使用此代码,它只会更新一项(lastone)。但我想分别更新每个产品的数量

忘了说,我使用https://github.com/Crinsane/LaravelShoppingcart 作为我的购物车插件

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    首先让我们改进你的刀片文件,你可以使用刀片语法而不是 PHP,所以在这里:

    <form method="post" action="/update-cart">
        @csrf
    
        @foreach($datacart as $datacart)
            <input type="hidden" name="rowid[]" value="{{$datacart->rowid}}">
            <input type="text" name="quantity[]" value="{{$datacart->quantity}}">
        @endforeach
    
        <input type="submit" value="update">
    </form>
    

    所以请注意输入元素的名称属性现在接受多个值作为数组。然后要在您的控制器中处理它,您可以执行以下操作:

    public function update_cart(Request $request) {
    
        foreach ( $request->rowid as $index => $id ) {
           Cart::find($id)->update(['quantity' => $request->quantity[$index]]);
        }
    
    }
    

    -- 编辑

    刚刚测试在模型上调用update 作为静态方法不起作用。

    【讨论】:

    【解决方案2】:

    你需要在名字后面加上[]

    <input type="hidden" name="rowid[]" value="{{$datacart->rowid}}">
    <input type="text" name="quantity[]" value="{{$datacart->quantity}}">
    

    然后在你的控制器方法中

    public function update_cart(Request $request) {
      for ($i = 0; $i < count($request->input('rowid')); $i++) {
        $cart = Cart::find($request->input('rowid')[$i];
    
        $cart->quantity = $request->input('quantity')[$i];
      }
    }
    

    【讨论】:

      【解决方案3】:

      因此,您需要在 html 标记中定义输入是这样的数组:

      即在输入元素名称旁边使用方括号[]

      <?php foreach($datacart as $datacart) { ?>
      <form method="post" action="/update-cart">
      
      <input type="hidden" name="rowid[]" value="{{$datacart->rowid}}">
      <input type="text" name="quantity[]" value="{{$datacart->quantity}}">
      
       <?php }>
      
      <input type="submit" value="update">
      
      </form>
      

      然后当你在控制器方法中处理请求时,你需要这样处理:

      public function update_cart(request $request) {
          foreach ($request->rowid as $index => $rowid) {
              $quantity = $request->quantity[$index];
              Cart::where('id', $rowId)
                  ->update([
                      'quantity' => $quantity
                  ]);
          }
      }
      

      【讨论】:

        【解决方案4】:

        谢谢大家。这段代码对我有用。我使用带有索引的循环

        <input type="hidden" name="rowid[]" value="{{$datacart->rowid}}">
        <input type="text" name="quantity[]" value="{{$datacart->quantity}}">
        

        ,

         for ($i = 0; $i < count($request->input('rowid')); $i++){
        
                    Cart::update($request->rowid[$i], $request->quantity[$i]);
        
                }
        

        【讨论】:

        • 你应该接受一个对你有帮助的答案,因为所有的建议都是你刚刚展示的。并且没有回答您从其他答案中获得的帮助。
        猜你喜欢
        • 2023-03-25
        • 1970-01-01
        • 2011-01-13
        • 1970-01-01
        • 2022-09-30
        • 2015-01-02
        • 1970-01-01
        • 1970-01-01
        • 2017-03-03
        相关资源
        最近更新 更多