Anda seharusnya tidak menggunakan implode
. Itu menempatkan daftar yang dipisahkan koma dari semua yang ada di formulir ke dalam setiap baris yang Anda masukkan, dan mengulanginya untuk setiap kotak yang dicentang. Anda cukup memasukkan satu item di setiap baris, dengan mengindeks array.
Namun, ketika Anda memiliki kotak centang di formulir, itu hanya mengirimkan yang dicentang. Hasilnya adalah indeks dari $_POST['checkbox']
array tidak akan cocok dengan $_POST['item']
yang sesuai dan $_POST['quantity']
elemen. Anda perlu memasukkan indeks eksplisit ke dalam checkbox
nama sehingga Anda dapat menghubungkannya.
<form method = "POST">
<input type = "hidden" name = "item[]" value = "cupcake">
<input type = "text" name = "items" value = "cupcake" readonly><br>
<b>Price :</b> <span name = "price" value = "3.00">$17.00</span><br>
Quantity: <input tabindex="1" name="quantity[]" min="0" max="5" type="number" class="quantity" value="1" /><br>
<input tabindex="1" name="checkbox[0]" type="checkbox" value="17" /><span>Add to Cart</span></label></div></div></td><br>
<input type = "hidden" name = "item[]" value = "cake">
<input type = "text" name = "items" value = "cake" readonly><br>
<b>Price :</b> <span name = "price" value = "20.00">$20.00</span><br>
Quantity: <input tabindex="1" name="quantity[]" min="0" max="5" type="number" class="quantity" value="1" /><br>
<input tabindex="1" name="checkbox[1]" type="checkbox" value="20" /><span>Add to Cart</span></label></div></div></td><br>
<input type = "submit" name = "insertBT"><br>
</form>
Maka kode PHP Anda bisa seperti ini:
$stmt = $conn->prepare("INSERT INTO purchases (Product, Quantity, Price) VALUES (?, ?, ?)");
$stmt->bind_param("sis", $name, $quantity, $price);
foreach ($_POST['checkbox'] as $i => $price) {
$name = $_POST['name'][$i];
$quantity = $_POST['quantity'][$i];
$stmt->execute();
}
BTW, menempatkan harga di HTML Anda sepertinya ide yang buruk. Tidak ada yang menghentikan pengguna untuk memodifikasi HTML menggunakan pemeriksa web sebelum mereka mengirimkan formulir, sehingga mereka dapat menurunkan harganya. Anda harus mendapatkan harga dari database saat memproses formulir.
Perhatikan juga bahwa dalam kode asli Anda, Anda membuka koneksi database menggunakan MySQLi, tetapi kemudian Anda mencoba melakukan penyisipan menggunakan mysql_query
bukannya $conn->query()
. Anda tidak dapat mencampur API seperti itu; myql_query
hanya dapat digunakan ketika Anda membuka koneksi dengan mysql_connect
.