Увеличаване на количеството при добавяне на същия артикул към сесията на количката?

В момента имам пазарска количка, която ще добави артикул към сесията на количката. Ако в количката се добави друг от същия артикул, тя показва дублиращи се артикули, всеки с количество 1.

Какво трябва да добавя/променя кода за актуализиране на количеството на съществуващ артикул? Вместо да добавяте дублиран елемент.

add_to_cart.php

session_start();

include 'cart.php';
$item_id = $_POST['item_id'];
$qty = $_POST['qty'];
$counter = $_SESSION['counter'];
$cart = new Cart();

if ($counter>0)
{
    $cart = unserialize($_SESSION['cart']);
}
else 
{
    $_SESSION['counter'] = 0;
    $_SESSION['cart'] = "";
}
if (($item_id == "")or ($qty < 1))
{
    header("Location: products.php");
}
else
{
    require_once('conn_db.php');

    $query = "SELECT item_name, price FROM products WHERE (item_id=$item_id)";

    $result = mysql_query($query) or die("Database Error");
    if(mysql_num_rows($result) == 1)
    {
        $price = mysql_result($result, 0,"price");
        $item_name = mysql_result($result, 0, "item_name");

        $new_item = new Item($item_id, $item_name, $qty, $price);
        $cart->add_item($new_item);

        $_SESSION['counter'] = $counter+1;
        $_SESSION['cart'] = serialize($cart);

        header("Location: products.php");
        mysql_close();
    }
    else
    {
        header("Location: products.php");
    }
}   

cart.php

class Item {

    var $item_id;
    var $item_name;
    var $qty;
    var $price;
    var $deleted = false;

    function get_item_cost() {
        return $this->qty * $this->price;
    }

    function delete_item() {
        $this->deleted = true;
    }

    function Item($item_id, $item_name, $qty, $price) {
        $this->item_id = $item_id;
        $this->item_name = $item_name;
        $this->qty = $qty;
        $this->price = $price;
    }

    function get_item_id() {
        return $this->item_id;
    }

    function get_item_name() {
        return $this->item_name;
    }

    function get_qty() {
        return $this->qty;
    }

    function get_price() {
        return $this->price;
    }

}

class Cart {

    var $items;
    var $depth;

    function Cart() {
        $this->items = array();
        $this->depth = 0;
    }

    function add_item($item) {
        $this->items[$this->depth] = $item;
        $this->depth++;
    }

    function delete_item($item_no) {
        $this->items[$item_no]->delete_item();
    }

    function get_depth() {
        return $this->depth;
    }

    function get_item($item_no) {
        return $this->items[$item_no];
    }

}

person BobSacamano    schedule 28.11.2013    source източник
comment
Преди да продължите да създавате пазарска количка, прочетете това, след това определено не опитвайте това $_POST['item_id'] = '1);DROP TABLE products;(', тогава прочетете това, след което погледнете голямото червено предупреждение в горната част на страницата, след което прочетете това.   -  person MLeFevre    schedule 28.11.2013
comment
Знам, че съм мързелив. Няма да се използва в реалния свят. Просто училищна задача.   -  person BobSacamano    schedule 28.11.2013


Отговори (2)


Доста бърз пример, трябва да ви насочи в правилната посока. Ще трябва да проверите своя add_item(), за да проверите дали количката вече съдържа артикула

function add_item($item) {
    $item_already_exists = false;
    foreach ($this->items as $depth_id => $item_in_cart) { // loop through the current contents of the cart
        if ($item_in_cart->get_item_id() == $item->get_item_id()) { // if the item already exists in the cart
            $item_already_exists = true;
            $item_exists_at = $depth_id;
            break;
        }
    }

    if ($item_already_exists == true) { //update the existing item
        $this->items[$item_exists_at]->update_qty($item->get_qty());
    } else { // add the new item
        $this->items[$this->depth] = $item;
        $this->depth++;
    }
}

След това ще трябва да създадете update_quantity() във вашия клас Item

function update_qty($qty) {
    $this->qty += $qty;
}
person MLeFevre    schedule 28.11.2013
comment
Брилянтно! Благодаря ти за помощта. - person BobSacamano; 28.11.2013

Преди да добавите артикула, проверете дали вече съществува в пазарската количка. Ако е невярно, добавете го. Ако е вярно, просто променете количеството! :)

person CrisBee21    schedule 28.11.2013