Я попробовал ваш код на локальном сервере, создав базу данных, но установив некоторые переменные
$uid = 41;
$oid = 165;
$pid = 38;
$status = 'Completed';
, и код работает нормально, поэтому я попытался использовать другие значения, чтобы воспроизвести вашу ошибку , поэтому изменив uid:
$uid = 411;
$oid = 165;
$pid = 38;
$status = 'Completed';
Заказ обновлен, но продукт не обновляется.
Это потому, что в строке
$query =mysqli_query($db,"SELECT * FROM orders WHERE id = '$oid' AND user_id = '$uid' AND product_id = '$pid'");
Вы фильтруете заказ по user_id, но, возможно, заказ не был создан зарегистрированным пользователем.
Вы можете проверить это, добавив в свою функцию следующий дамп:
var_dump(
"product:".$productRow['productQty'],
"order:".$orderRow['quantity'],
"result:".($productRow['productQty'] - $orderRow['quantity'])
);
Вы ожидаете получить
string 'product:20' (length=10)
string 'order:1' (length=7)
string 'result:19' (length=9)
но вы получите:
string 'product:20' (length=10)
string 'order:' (length=6)
string 'result:20' (length=9)
Поэтому необходимо удалить фильтр user_id, чтобы разрешить зарегистрированному пользователю обновлять количество в таблице продуктов
Но если user_id не является создателем ордера и соответствует последнему пользователю-модификатору, вы должны обновить значение user_id в той же строке выписки, когда обновляете статус и дату подтверждения
Надеюсь, это очистит ваш запрос убтс и решит твою проблему