Как вычесть значения из таблицы продуктов и таблицы заказов? - PullRequest
1 голос
/ 28 апреля 2020

таблица заказов

enter image description here

таблица продуктов

enter image description here

Картины заказа и таблицы продуктов. Я пытаюсь изменить количество товара на складе, когда администратор подтвердит заказ клиента, а количество товара изменится в соответствии с количеством, добавленным из таблицы заказа.

Что я пробовал:

Я попробовал код, как показано ниже, но нет никаких изменений. Ничего не работает.

function upOrder(){
global $db;
    $uid = $_SESSION['user_id'];
    $oid = intval($_GET['oid']);
    $pid = intval($_GET['pid']);
    $status = $_POST['status'];

            $sql=mysqli_query($db,"update orders set payment_status='$status', confirmDate = CURRENT_TIMESTAMP where id='$oid'");

            if($status == 'Completed'){

            $result =mysqli_query($db,"SELECT productQty FROM products WHERE id = '$pid'");
            $query =mysqli_query($db,"SELECT * FROM orders WHERE id = '$oid' AND user_id = '$uid' AND product_id = '$pid'");

            $productRow = $result->fetch_assoc();
            $orderRow = $query->fetch_assoc();

            $newqty = $productRow['productQty'] - $orderRow['quantity'];
            $wow =mysqli_query($db,"UPDATE products SET productQty = '$newqty' WHERE id = '$pid'");

            if($wow){

                echo "alert('Order updated sucessfully...');";

            }else{

                echo "alert('Failed!');";

            }
            }

} ​​

1 Ответ

0 голосов
/ 28 апреля 2020

Я попробовал ваш код на локальном сервере, создав базу данных, но установив некоторые переменные

$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 в той же строке выписки, когда обновляете статус и дату подтверждения

Надеюсь, это очистит ваш запрос убтс и решит твою проблему

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...