Не трябва да използвате implode
. Това поставя разделен със запетая списък с всичко във формуляра във всеки ред, който вмъквате, и повтаря това за всяко поле, което е отметнато. Трябва просто да вмъкнете по един елемент във всеки ред, като индексирате масивите.
Въпреки това, когато имате квадратче за отметка във формуляр, той изпраща само тези, които са отметнати. Резултатът от това е, че индексите на $_POST['checkbox']
масивът няма да съвпада със съответния $_POST['item']
и $_POST['quantity']
елементи. Трябва да поставите изрични индекси в checkbox
имена, за да можете да ги свържете.
<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>
Тогава вашият PHP код може да бъде така:
$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, поставянето на цените във вашия HTML изглежда като лоша идея. Нищо не спира потребителя да променя HTML с помощта на уеб инспектора, преди да изпрати формуляра, за да може да намали цената. Трябва да получите цените от базата данни при обработка на формуляра.
Също така забележете, че в оригиналния си код сте отворили връзката към базата данни с MySQLi, но след това сте се опитали да направите вмъкването с помощта на mysql_query
вместо $conn->query()
. Не можете да смесвате API по този начин; myql_query
може да се използва само когато отворите връзката с mysql_connect
.