Update sorgusunda SET kullanmalısınız. ayrıca $ca['sepetadet'] döngü dışında kullanmışsınız bu yüzden en son gelen veriyi baz alır ve inner join mantıksız olur. ya döngü içine alacaksınız ya da en son toplu yapacaksınız. Şu kodun işe yaraması lazım:
if ($result->rowCount()) {
$cart = $db->prepare("SELECT * FROM sepet INNER JOIN urunler ON urunler.urunkodu = sepet.sepeturun WHERE sepetuser=:b");
$cart->execute([':b' => $bcode]);
if ($cart->rowCount()) {
foreach ($cart as $ca) {
$orderproducts = $db->prepare("INSERT INTO siparis_urunler SET
sipkodu =:s,
sipurun =:u,
sipbirim =:b,
sipadet =:a,
siptoplam =:t,
sipkg =:k,
siptoplamkg=:tk,
sipurunadi =:ua
");
$orderproducts->execute([
':s' => $code,
':u' => $ca['sepeturun'],
':b' => $ca['birimfiyat'],
':a' => $ca['sepetadet'],
':t' => $ca['toplamfiyat'],
':k' => $ca['birimkg'],
':tk' => $ca['toplamkg'],
':ua' => $ca['urunbaslik']
]);
}
$stock = $db->prepare("
UPDATE urunler
INNER JOIN siparis_urunler ON urunler.urunkodu = siparis_urunler.sipurun
SET urunler.urunstok = urunler.urunstok - siparis_urunler.sipadet
WHERE siparis_urunler.sipkodu = :kod
AND urunler.urunstok >= siparis_urunler.sipadet
");
$stock->execute([':kod' => $code]);
}
} ErayEfe hocam, bu şekilde son veriyi güncelliyor, öncekileri yok sayıyor.