Sie sollten implode
nicht verwenden . Dadurch wird eine durch Kommas getrennte Liste aller Elemente des Formulars in jede Zeile eingefügt, die Sie einfügen, und dies wird für jedes aktivierte Kontrollkästchen wiederholt. Sie sollten einfach ein Element in jede Zeile einfügen, indem Sie die Arrays indizieren.
Wenn Sie jedoch ein Kontrollkästchen in einem Formular haben, werden nur diejenigen übermittelt, die aktiviert sind. Das Ergebnis davon ist, dass die Indizes der $_POST['checkbox']
Das Array stimmt nicht mit dem entsprechenden $_POST['item']
überein und $_POST['quantity']
Elemente. Sie müssen explizite Indizes in die checkbox
setzen Namen, damit Sie sie zuordnen können.
<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>
Dann könnte Ihr PHP-Code so aussehen:
$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();
}
Übrigens scheint es eine schlechte Idee zu sein, die Preise in Ihren HTML-Code einzufügen. Nichts hindert den Benutzer daran, HTML mit dem Webinspektor zu ändern, bevor er das Formular absendet, sodass er den Preis senken könnte. Sie sollten die Preise aus der Datenbank erhalten, wenn Sie das Formular bearbeiten.
Beachten Sie auch, dass Sie in Ihrem ursprünglichen Code die Datenbankverbindung mit MySQLi geöffnet haben, aber dann versucht haben, die Einfügung mit mysql_query
durchzuführen statt $conn->query()
. Sie können APIs nicht so mischen; myql_query
kann nur verwendet werden, wenn Sie die Verbindung mit mysql_connect
öffnen .