首頁  >  問答  >  主體

將多個複選框的值和不同的輸入值作為一個整體保存到資料庫中

<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</powBooks< </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粉807471604388 天前439

全部回覆(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
  • 取消回覆