Mysql
 sql >> Datenbank >  >> RDS >> Mysql

PHP fügt mehrere Kontrollkästchen- UND Textfeld-Arrays in die MySQL-Datenbank ein

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 .