Je zou implode
niet moeten gebruiken . Dat plaatst een door komma's gescheiden lijst van alles in het formulier in elke rij die u invoegt, en herhaalt dit voor elk vakje dat is aangevinkt. U hoeft slechts één item in elke rij in te voegen door de arrays te indexeren.
Wanneer u echter een selectievakje in een formulier heeft, worden alleen de aangevinkte vakjes verzonden. Het resultaat hiervan is dat de indexen van de $_POST['checkbox']
array komt niet overeen met de corresponderende $_POST['item']
en $_POST['quantity']
elementen. U moet expliciete indexen in het checkbox
plaatsen namen zodat u ze kunt relateren.
<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>
Dan kan je PHP-code er zo uitzien:
$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, de prijzen in je HTML zetten lijkt een slecht idee. Niets houdt de gebruiker tegen om HTML te wijzigen met behulp van de webinspecteur voordat ze het formulier indienen, zodat ze de prijs kunnen verlagen. U zou de prijzen uit de database moeten halen bij het verwerken van het formulier.
Merk ook op dat u in uw oorspronkelijke code de databaseverbinding opende met MySQLi, maar dat u vervolgens probeerde de invoeging uit te voeren met behulp van mysql_query
in plaats van $conn->query()
. Zo kun je API's niet combineren; myql_query
kan alleen worden gebruikt als u de verbinding opent met mysql_connect
.