Search code examples
phpsessionmatchcart

Determine if new cart entry contains same identifiers as an entry already in the cart/SESSION


I have a function that adds custom built cameos in a cart. The cart is stored in a session variable. If the customer decides to build the very same cameo I don't want to add another entry to the array I just want to be able to add 1 more to the quantity of said product. The problem is when the scripts reaches the point where it's checking to see if the values exist in the array it returns false and adds a new entry to the array. I am fairly new to PHP so I'm not sure if I am going about it the right way.

function AddToCart($subpid,$subtype,$subprice,$subtotal,$subcarving,$subline1,$subline2){
    global $form;
    
    $exist = false;
    $i=0;
    
    if(!isset($_SESSION['cart'])){
        $_SESSION['cart'] = array(0 => array("Product ID" => $subpid, "Type" => $subtype, "Price" => "$".$subprice, "Subtotal" => "$".$subtotal, "Carving" => $subcarving, "Line 1" => $subline1, "Line 2" => $subline2, "Quantity" => 1));
    }
    else{
        foreach($_SESSION['cart'] as $item){
            $i++;
            while(list($key,$value) = each($item)){
                /* If product exist add 1 to quantity */
                if($key == "Product ID" && $value == $subpid && $key == "Type" && $value == $subtype && $key == "Price" && $value == "$".$subprice && $key == "Subtotal" && $value == "$".$subtotal  && $key == "Carving" && $value == $subcarving && $key == "Line 1" && $value == $subline1 && $key == "Line 2" && $value == $subline2){
                    array_splice($_SESSION['cart'], $i-1, 1, array(array("Product ID" => $subpid, "Type" => $subtype, "Price" => "$".$subprice, "Subtotal" => "$".$subtotal, "Carving" => $subcarving, "Line 1" => $subline1, "Line 2" => $subline2, "Quantity" => $item['Quantity'] + 1)));
                    $exist = true;
                }
            }
        }
        if($exist == false){
            array_push($_SESSION['cart'], array("Product ID" => $subpid, "Type" => $subtype, "Price" => "$".$subprice, "Subtotal" => "$".$subtotal, "Carving" => $subcarving, "Line 1" => $subline1, "Line 2" => $subline2, "Quantity" => 1));
        }
    }
    return 0;
}

If I was to just use: $key == "Product ID" && $value == $subid it will return true and update the quantity but the problem with that is if the customer buys two cameo with the same id but different carving on it or engravings my cart will be off.


Solution

  • It doesn't work because you are comparing each key at the same time with the && statement but you're looping through each one of your keys one at a time. Take out the while loop and just compare it like this:

    if( $item['Product ID'] == $subpid ... //etc ) {
    
    }
    

    Also you don't need array_splice just update the items.