Sky67
Sky67

Reputation: 73

Add item quantity instead of replacing

When i use this add to cart script i erases the already added quantity in session!

But i want it to add the specefied quantity plus the quantity already in basket session.

How to do that?

Scroll to the right on demo (the page i F****d up)//

Live DEMO here http://www.sanwebe.com/assets/php-shopping-cart/index.php

Here is the following code that i use

<?php

session_start();

include_once("config.php");



//empty cart by distroying current session

if(isset($_GET["emptycart"]) && $_GET["emptycart"]==1)

{

    $return_url = base64_decode($_GET["return_url"]); //return url

    session_destroy();

    header('Location:'.$return_url);

}



//add item in shopping cart

if(isset($_POST["type"]) && $_POST["type"]=='add')

{

    $product_code   = filter_var($_POST["product_code"], FILTER_SANITIZE_STRING); //product code

    $product_qty    = filter_var($_POST["product_qty"], FILTER_SANITIZE_NUMBER_INT); //product code

    $return_url     = base64_decode($_POST["return_url"]); //return url







    //MySqli query - get details of item from db using product code

    $results = $mysqli->query("SELECT product_name,price FROM products WHERE product_code='$product_code' LIMIT 1");

    $obj = $results->fetch_object();



    if ($results) { //we have the product info 



        //prepare array for the session variable

        $new_product = array(array('name'=>$obj->product_name, 'code'=>$product_code, 'qty'=>$product_qty, 'price'=>$obj->price));



        if(isset($_SESSION["products"])) //if we have the session

        {

            $found = false; //set found item to false



            foreach ($_SESSION["products"] as $cart_itm) //loop through session array

            {

                if($cart_itm["code"] == $product_code){ //the item exist in array



                    $product[] = array('name'=>$cart_itm["name"],  'code'=>$cart_itm["code"], 'qty'=>$product_qty, 'price'=>$cart_itm["price"]);

                    $found = true;

                }else{

                    //item doesn't exist in the list, just retrive old info and prepare array for session var

                    $product[] = array('name'=>$cart_itm["name"],  'code'=>$cart_itm["code"], 'qty'=>$cart_itm["qty"], 'price'=>$cart_itm["price"]);

                }

            }



            if($found == false) //we didn't find item in array

            {

                //add new user item in array

                $_SESSION["products"] = array_merge($product, $new_product);

            }else{

                //found user item in array list, and increased the quantity

                $_SESSION["products"] = $product;

            }



        }else{

            //create a new session var if does not exist

            $_SESSION["products"] = $new_product;

        }



    }



    //redirect back to original page

    header('Location:'.$return_url);

}



//remove item from shopping cart

if(isset($_GET["removep"]) && isset($_GET["return_url"]) && isset($_SESSION["products"]))

{

    $product_code   = $_GET["removep"]; //get the product code to remove

    $return_url     = base64_decode($_GET["return_url"]); //get return url





    foreach ($_SESSION["products"] as $cart_itm) //loop through session array var

    {

        if($cart_itm["code"]!=$product_code){ //item does,t exist in the list

            $product[] = array('name'=>$cart_itm["name"], 'code'=>$cart_itm["code"], 'qty'=>$cart_itm["qty"], 'price'=>$cart_itm["price"]);

        }



        //create a new product list for cart

        $_SESSION["products"] = $product;

    }



    //redirect back to original page

    header('Location:'.$return_url);

}

?>

Upvotes: 1

Views: 687

Answers (1)

Serhat Akay
Serhat Akay

Reputation: 534

Maybe Change This:

//found user item in array list, and increased the quantity
$_SESSION["products"] = $product;

To:

//found user item in array list, and increased the quantity
$_SESSION["products"] = $_SESSION["products"] + $product;

Upvotes: 1

Related Questions