Du bør ikke bruge implode
. Det sætter en kommasepareret liste over alt i formularen i hver række, du indsætter, og gentager dette for hver boks, der er markeret. Du skal blot indsætte et element i hver række ved at indeksere arrays.
Men når du har et afkrydsningsfelt i en formular, indsender den kun dem, der er markeret. Resultatet af dette er, at indekserne for $_POST['checkbox']
array vil ikke matche den tilsvarende $_POST['item']
og $_POST['quantity']
elementer. Du skal sætte eksplicitte indekser i checkbox
navne, så du kan relatere dem.
<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>
Så kan din PHP-kode være sådan her:
$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, at sætte priserne i din HTML virker som en dårlig idé. Intet forhindrer brugeren i at ændre HTML ved hjælp af webinspektøren, før de indsender formularen, så de kunne sænke prisen. Du bør få priserne fra databasen, når du behandler formularen.
Bemærk også, at du i din originale kode åbnede databaseforbindelsen ved hjælp af MySQLi, men så forsøgte du at lave indsættelsen ved hjælp af mysql_query
i stedet for $conn->query()
. Du kan ikke blande API'er på den måde; myql_query
kan kun bruges, når du åbner forbindelsen med mysql_connect
.