Simpan berbilang nilai kotak semak dan nilai input yang berbeza secara keseluruhan ke pangkalan data
P粉807471604
P粉807471604 2023-08-31 11:17:47
0
1
504
<p>Saya cuba memasukkan data/nilai ke dalam pangkalan data saya. </p> <p>Ia berfungsi, tetapi masalahnya ialah setiap kali saya memilih hanya nilai/kotak semak kedua, nilai inputnya yang lain mendapat nilai input pertama. </p> <pre class="brush:php;toolbar:false;"><form action="{{url('/reservation')}}" @csrf <div class="row col-12"> <div> <p class='mybox text-dark'><input type="checkbox"name="prod_name[]"nilai="JasminBooks"/>JasminBooks</p> </div> <div> <jenis input="nombor"nama="prod_qty[]"min="1"nilai="1"kelas="kawalan bentuk ml-2"> </div> <div class="row col-12"> <div> <p class='mybox text-dark'><input type="checkbox"name="prod_name[]"nilai="KnowHowBooks"/>KnowHowBooks</p> </div> <div> <jenis input="nombor"nama="prod_qty[]"min="1"nilai="1"kelas="kawalan bentuk ml-2"> </div> </div> </form></pre> <p>Ini ialah kod untuk fungsi pengawal saya</p> <pre class="brush:php;toolbar:false;">tempahan fungsi awam(Minta $request) { $data = tempahan baharu; $data->nama = $permintaan->nama; $data->e-mel = $permintaan->e-mel; $data->telefon = $permintaan->telefon; $data->alamat = $permintaan->alamat; $data->tarikh = $permintaan->tarikh; $data->masa = $request->masa; $produk = null; $checked_array = $_POST['prod_name']; foreach($_POST['prod_name'] sebagai $key => $value) { if (in_array($_POST['prod_name'][$key], $checked_array)) { $produk .= $_POST['prod_qty'][$key]." ".$_POST['prod_name'][$key].", "; } } $data->produk = $produk; $data->simpan(); return redirect()->back(); }</pre> <p>Bila</p> <ol> <li>Apabila saya memilih kotak pilihan pertama dan memasukkan nilai 5, hasilnya ialah "5 JasminBooks,"</p><p></li> <li>Apabila saya memilih kedua-dua kotak semak dan masukkan kuantiti 12 dalam kotak input pertama di sebelah kotak semak pertama dan kotak input kedua di sebelah kotak semak kedua Apabila kuantiti ialah 7, hasilnya ialah "12 JasminBooks, 7 KnowHowBooks, " </li> <li>Tetapi apabila saya hanya memilih kotak semak kedua dan masukkan 13 dalam kotak input kuantiti, hasilnya ialah "1 KnowHowBooks," yang mengambil nilai lalai yang dimasukkan dalam yang pertama dan bukannya apa yang saya masukkan dalam kotak kedua Masukkan kuantiti 13 ke dalam kotak input. </li> </ol> <p>Apakah yang perlu saya tambah/ubah dalam kod saya? </p>
P粉807471604
P粉807471604

membalas semua(1)
P粉587780103

Ini kerana anda mentakrifkan medan kuantiti anda berdasarkan indeks. Jika satu input tiada, ia boleh menjejaskan keseluruhan hasil anda. Gunakan nilai sebagai kunci:

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. Seperti kata Bhaumik, jangan gunakan $_POST dalam Laravel.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan