Neměli byste používat implode
. To vloží čárkami oddělený seznam všeho ve formuláři do každého řádku, který vložíte, a zopakuje to pro každé zaškrtnuté políčko. Do každého řádku byste měli vložit pouze jednu položku indexováním polí.
Pokud však ve formuláři máte zaškrtávací políčko, odešle pouze ty, které jsou zaškrtnuté. Výsledkem toho je, že indexy $_POST['checkbox']
pole se nebude shodovat s odpovídajícím $_POST['item']
a $_POST['quantity']
Prvky. Musíte zadat explicitní indexy do checkbox
jména, abyste je mohli spojit.
<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>
Pak může být váš PHP kód takto:
$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, vkládat ceny do HTML vypadá jako špatný nápad. Nic nebrání uživateli upravit HTML pomocí webového inspektora před odesláním formuláře, takže by mohli snížit cenu. Ceny byste měli získat z databáze při zpracování formuláře.
Všimněte si také, že ve svém původním kódu jste otevřeli připojení k databázi pomocí MySQLi, ale poté jste se pokusili provést vložení pomocí mysql_query
místo $conn->query()
. Nemůžete takto míchat API; myql_query
lze použít pouze při otevření připojení pomocí mysql_connect
.