Получить количество определенного товара из базы данных вместо корзины покупок сеанса (PHP и MySQL)

#php #mysql #database #session #shopping-cart

#php #mysql #База данных #сеанс #корзина покупок

Вопрос:

Я пытался создать постоянное приложение корзины покупок на основе MySQL, начиная с корзины покупок php на основе сеанса. cart Таблица имеет структуру userid | productid | quantity | postingdate . В реализации на основе сеанса информация о количестве для определенного продукта была сохранена в $_SESSION['cart'][$row['id']]['quantity']; ; Я сталкиваюсь с проблемой получения информации о количестве для определенного продукта из cart таблицы в базе данных, потому что я не могу найти, как извлечь productId необходимое для $getquantity запроса.

 $sql1 = "SELECT * FROM cart WHERE userid='$userId'"; //selects the user's cart
$query1=mysqli_query($con,$sql1);
if (!empty($query1)) {    //if the user's cart isn't empty
    while($row = mysqli_fetch_array($query1)){
        $query = mysqli_query($con,"SELECT * FROM products JOIN cart ON cart.productid=products.id 
ORDER BY cart.postingDate DESC"); //selects all the products in the current user's cart
    } 
    $totalprice=0;
    $totalqunty=0;
    if (!empty($query)) {
        while ($row = mysqli_fetch_array($query)) { //for each product
            //$quantity=$_SESSION['cart'][$row['id']]['quantity']; //SESSION IMPLEMENTATION
            $id = $row['id'];
            $quantity = mysqli_query($con,"SELECT quantity FROM cart WHERE userid='$userId' AND productid='$id'"); //MY IMPLEMENTATION, THE WRONG PART IS WITH $id
            $subtotal= $quantity*$row['productPrice'] $row['shippingCharge'];
            $totalprice  = $subtotal;  
            $_SESSION['qnty']=$totalqunty =$quantity; //SESSION IMPLEMENTATION
        }
    }
}

 

Я пробовал $row['id'] , но он возвращает массив всех productid записей, возвращаемых, $query и MySQL, похоже, не принимает его, в то время как вместо этого мне нужно $getquantity запускать для каждого productid . Пожалуйста, не обращайте внимания на то, насколько он уязвим для SQL-инъекций, поскольку я доберусь до этого на более поздних этапах.

Комментарии:

1. Привет @Chiara, если я правильно понял вопрос, вы могли бы переписать свой SQL-запрос и сгруппировать результаты по userid . Например, $sql1 = 'SELECT userid, productid, SUM(quantity) FROM cart WHERE userid="$userid" GROUP BY productid .

2. Спасибо, я попробую это немедленно @Mark!

Ответ №1:

Вот рабочее решение: я мог бы просто выбрать cart.quantity атрибут (учитывая, как products cart была объединена таблица and).:

 $sql1 = "SELECT * FROM cart WHERE userid='$userId'"; //selects the user's cart
$query1=mysqli_query($con,$sql1);
if (!empty($query1)) {    //if the user's cart isn't empty
    while($row = mysqli_fetch_array($query1)){
        $query = mysqli_query($con,"SELECT products.productImage1 , products.productName ,
                                                    products.id, cart.productId, cart.quantity as qty, products.productPrice,
                                                    products.shippingCharge  FROM products JOIN cart ON cart.productid=products.id 
ORDER BY cart.postingDate DESC"); //selects all the products in the current user's cart
    } 
    $totalprice=0;
    $totalqunty=0;
    if (!empty($query)) {
        while ($row = mysqli_fetch_array($query)) { //for each product
            $quantity=$row['qty'];
            $subtotal= $quantity*$row['productPrice'] $row['shippingCharge'];
            $totalprice  = $subtotal;   
        }
    }
}