Цикл foreach записывает в бд только первый или последний товар в массиве
<?php session_start();
if (isset($_POST["sotr"]) && isset($_POST["klient"]) && isset($_POST["data_post"]) && isset($_POST["adres"]) && isset($_POST["total_price"]) ) {
$x2=$_POST["sotr"];
$x3=$_POST["klient"];
$x4=$_POST["data_post"];
$x5=$_POST["adres"];
$x8=$_POST["total_price"];
include 'BD.php';
$sql = "INSERT INTO zakaz (id_sotrudnica, id_klienta, data_postup_zakaza, adres_zakazchika, order_cost) VALUES ('$x2', '$x3', '$x4', '$x5', '$x8')";
$res = $link->query($sql);
$sql1="SELECT * FROM zakaz ORDER BY id_zakaza DESC";
$result = $link->query($sql1);
$row=mysqli_fetch_array($result);
$x9=$row["id_zakaza"];
foreach($_SESSION['cart'] as $id=>$kol)
{
$sql2="SELECT * FROM tovar WHERE id_tovara='$id'";
$result2 = $link->query($sql2);
$row2=mysqli_fetch_array($result2);
$price=$row2["price"]*$kol;
$sql3 = "INSERT INTO spisok_tovarov_v_zakaze (id_zakaza, id_tovara, kolichestvo_tovara, price_tovara) VALUES ('$x9', '$id', '$kol', '$price')";
$res1=$link->query($sql3);
}
}
?>
В зависимости от того где будет стоять строка $res1=$link->query($sql3); Если в цикле, то записывает первый товар, если после цикла, то последний. Нужно чтобы цикл прошел по массиву и записал каждый товар в бд.
Источник: Stack Overflow на русском