for($i=0; $i < $productQty; $i++) {
$sqlOI = "INSERT INTO order_item (order_id, product_id, title, quantity)
VALUES (
(SELECT MAX(order_id) FROM orders),
'$productID',
'$title',
'$productQty'
)";
}//bottom of for loop
if(mysqli_query($conn, $sqlOI)){//execution
header("Location: account.php?success=orderPlaced");
exit();
}
Вы выполняете только последний цикл, потому что каждый раз перезаписываете свою строку sql.По крайней мере, вы должны переместить команду execute внутри цикла for, но в действительности вам, вероятно, следует сделать что-то вроде
$sql = [];//create an empty array
for($i=0; $i < $productQty; $i++) {
//insert a an update row
$sql[] = "VALUES ((SELECT MAX(order_id) FROM orders),:pdo_placeholder" . $I . ",.....)"
}
//implode the rows into a final string then do the connection
$sql = "INSERT INTO order_item
(order_id, product_id, title, quantity) VALUES " . implode(',',$sql);
//now we are outside the loop we can execute
//lets assume you've changed this to a properly prepared pdo execute statement and get the max id correctly for your query
if(mysqli_query($conn, $sqlOI)){
header("Location: account.php?success=orderPlaced");
exit();
}
, таким образом, вам нужно сделать только 1 соединение.Я собираюсь предположить, что вы прислушаетесь к комментариям относительно использования подготовленных заявлений и воли.- ОБНОВЛЕНИЕ -
Основываясь на ваших комментариях ниже, я добавлю это:
Вы никогда не обновляете свои переменные.Давайте просто возьмем 1
$title = $_POST['title'];
, это устанавливается один раз и никогда не обновляется, поэтому логически каждая итерация цикла будет вставлять одно и то же значение.в своей форме вы используете одно и то же имя для ввода:
<td><input type="text" name="title" value="<?php echo $product['title']; ?>"></td>
Но вы получаете только одно значение - не можете вспомнить, первое это или последнее, но быстрый гугл скоро скажет вам.Если вы хотите отправить несколько значений, вам нужно дать уникальное имя для использования синтаксиса пост-массива в вашей форме <input type="text" name="title[]"...
, тогда, когда вы будете выполнять цикл вставки, вы сможете получить доступ к правильному значению, сказав
$title = $_POST['title'][$i];
Вам нужно var_dump некоторых ваших переменных, чтобы вы могли видеть, какие данные вы отправляете, потому что я совершенно уверен, что они не совпадают с данными, которые вы думаетевы получаете