將多個複選框的值和不同的輸入值作為一個整體保存到資料庫中
P粉807471604
P粉807471604 2023-08-31 11:17:47
0
1
507
<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粉807471604
P粉807471604

全部回覆(1)
P粉587780103

這是因為你是根據索引來定義你的數量欄位的。如果一個輸入缺失,可能會影響你的整個結果。使用值作為鍵:

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

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板