Bạn không nên sử dụng implode
. Điều đó đặt một danh sách được phân tách bằng dấu phẩy gồm mọi thứ trong biểu mẫu vào mỗi hàng mà bạn chèn và lặp lại điều này cho mọi hộp được chọn. Bạn chỉ nên chèn một mục trong mỗi hàng, bằng cách lập chỉ mục các mảng.
Tuy nhiên, khi bạn có một hộp kiểm trong một biểu mẫu, nó chỉ gửi những cái được chọn. Kết quả của việc này là các chỉ mục của $_POST['checkbox']
mảng sẽ không khớp với $_POST['item']
tương ứng và $_POST['quantity']
các yếu tố. Bạn cần đặt các chỉ mục rõ ràng vào hộp kiểm checkbox
tên để bạn có thể liên hệ chúng.
<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>
Sau đó, mã PHP của bạn có thể giống như sau:
$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, đặt giá trong HTML của bạn có vẻ là một ý tưởng tồi. Không có gì ngăn cản người dùng sửa đổi HTML bằng cách sử dụng trình kiểm tra web trước khi họ gửi biểu mẫu, vì vậy họ có thể giảm giá. Bạn sẽ nhận được giá từ cơ sở dữ liệu khi xử lý biểu mẫu.
Ngoài ra, hãy lưu ý rằng trong mã gốc của bạn, bạn đã mở kết nối cơ sở dữ liệu bằng MySQLi, nhưng sau đó bạn cố thực hiện chèn bằng mysql_query
thay vì $conn->query()
. Bạn không thể kết hợp các API như vậy; myql_query
chỉ có thể được sử dụng khi bạn mở kết nối với mysql_connect
.