amimranse7en Ответов: 1

Как вычесть значения из таблицы product и таблицы order?


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

Что я уже пробовал:

я попробовал это сделать, но никаких изменений нет. Ничего не работает.
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 Ответов

Рейтинг:
4

MadMyche

У меня есть 2 проблемы с кодом, который вы представили; и это даже не заглядывание в код. диагностика аспект попытки выяснить, почему это не работает.

Первая проблема заключается в том, что ваш стиль создания SQL-запроса созрел для SQL-инъекция! Вы должны NEVER EVER создайте запрос, связав команды со строковыми значениями.
Я признаю, что существует некоторая рудиментарная защита, это не то, что всегда будет доступно, и на нее не следует полагаться.
Предпочтительным методом для PHP/MySql является использование того, что известно как подготовленное заявление Ваш запрос записывается с помощью заполнителей, а затем вы можете привязать свои переменные к этим заполнителям.
Существует множество документации о том, как это реализовать, например:
статья w3schools[^]

Второе, что меня не волнует, - это избыточные запросы, которые вы выполняете; это избыточные накладные расходы в приложении и дополнительный сетевой трафик на/с сервера базы данных. У вас есть 4 отдельных запроса, но он может быть сокращен только до 2 запросов обновления.
Чего многие люди не знают, так это того, что вы можете использовать объединения в обновлении.
Грубо переведенный из ваших двух запросов SELECT, я думаю, что вы могли бы реализовать что-то основанное на этом для вашего оператора update.

Обратите внимание, что это написано для SQL Server, который использует @Variable именование; и что PHP использует индексированные вопросительные знаки. Я оставил это для вас, чтобы вы изменили, так как таким образом вы можете увидеть, какие из ваших переменных PHP принадлежат где в запросе

UPDATE p
SET    p.ProductQty = p.ProductQty - o.Quantity
FROM   Products   p
INNER JOIN Orders o ON p.id = o.product_id
WHERE o.id         = @oid -- placeholders
AND   o.user_id    = @uid
AND   o.product_id = @pid


amimranse7en

@MadMyche ok спасибо тебе за твой совет, чувак. Я просто знал, что запрос обновления может использовать JOIN.