首页  >  问答  >  正文

将多个复选框的值和不同的输入值作为一个整体保存到数据库中

<p>我正在尝试将数据/值插入到我的数据库中。</p> <p>它可以工作,但问题是每次我只选择第二个值/复选框时,它的其他输入值会得到第一个输入的值。</p> <pre class="brush:php;toolbar:false;"><form action="{{url('/reservation')}}" method="post"> @csrf <div class="row col-12"> <div> <p class='mybox text-dark'><input type="checkbox" name="prod_name[]" value="JasminBooks"/>JasminBooks</p> </div> <div> <input type="number" name="prod_qty[]" min="1" value="1"class="form-control ml-2"> </div> <div class="row col-12"> <div> <p class='mybox text-dark'><input type="checkbox" name="prod_name[]" value="KnowHowBooks"/>KnowHowBooks</p> </div> <div> <input type="number" name="prod_qty[]" min="1" value="1"class="form-control ml-2"> </div> </div> </form></pre> <p>这是我的控制器函数的代码</p> <pre class="brush:php;toolbar:false;">public function reservation(Request $request) { $data = new reservation; $data->name = $request->name; $data->email = $request->email; $data->phone = $request->phone; $data->address = $request->address; $data->date = $request->date; $data->time = $request->time; $products = null; $checked_array = $_POST['prod_name']; foreach($_POST['prod_name'] as $key => $value) { if (in_array($_POST['prod_name'][$key], $checked_array)) { $products .= $_POST['prod_qty'][$key]." ".$_POST['prod_name'][$key].", "; } } $data->products = $products; $data->save(); return redirect()->back(); }</pre> <p>当</p> <ol> <li>我选择第一个复选框并输入数量为5的值时,结果是“5 JasminBooks,”</p><p></li> <li>当我同时选择两个复选框并在第一个复选框旁边的第一个输入框中输入数量为12,在第二个复选框旁边的第二个输入框中输入数量为7时,结果是“12 JasminBooks,7 KnowHowBooks,”</li> <li>但是当我只选择第二个复选框并在数量输入框中输入13时,结果是“1 KnowHowBooks,”它取了第一个输入的默认值,而不是我在第二个输入框中插入的数量13。</li> </ol> <p>我应该在我的代码中添加/更改什么?</p>
P粉807471604P粉807471604437 天前490

全部回复(1)我来回复

  • P粉587780103

    P粉5877801032023-09-01 09:44:11

    这是因为你是根据索引来定义你的数量字段的。如果一个输入缺失,可能会影响你的整个结果。使用值作为键:

    HTML:

    <div>
        <p class='mybox text-dark'><input type="checkbox" name="prod_name[]" value="JasminBooks"/>JasminBooks
        </p></div><div>
        <input type="number" name="prod_qty[JasminBooks]" min="1" value="1"class="form-control ml-2">
    </div>
    

    PHP:

    $products = '';
    $checked_array = $request->input('prod_name', []);
    $quantities = $request->input('prod_qty', []);
    
    foreach ($checked_array as $value) {
        if (array_key_exists($value, $quantities)) {
            $products .= "{$quantities[$value]} {$value}, ";
        }
    }
    
    // 移除末尾的 ', '
    if (! empty($products)) {
        $products = substr($products, 0, -2);
    } 
    
    $data->products = $products;

    P.S. 像 Bhaumik 说的那样,在 Laravel 中不要使用 $_POST

    回复
    0
  • 取消回复