0

I am creating a shopping cart and having some trouble adding the first item to it. The shopping cart code is below:

switch($action) { //decide what to do 

    case "add":

        $_SESSION['cart'][$Item_ID]++; //add one to the quantity of the product with id $product_id 
    break;

    case "remove":
        $_SESSION['cart'][$Item_ID]--; //remove one from the quantity of the product with id $product_id 
        if($_SESSION['cart'][$Item_ID] == 0) unset($_SESSION['cart'][$Item_ID]); //if the quantity is zero, remove it completely (using the 'unset' function) - otherwise is will show zero, then -1, -2 etc when the user keeps removing items. 
    break;

    case "empty":
        unset($_SESSION['cart'][$Item_ID]); //unset the whole cart, i.e. empty the cart. 
    break;

    case "nothing":
    break;
}

When I add an item for the first time (the first one added to the basket) it gives me these errors

Notice: Undefined index: cart in H:\STUDENT\S0190204\GGJ\Basket.php on line 59 Notice: Undefined index: 1 in H:\STUDENT\S0190204\GGJ\Basket.php on line 59
4
  • 1
    did you forgot session_start() ? Commented May 18, 2014 at 13:52
  • No sessions_start() is there Commented May 18, 2014 at 13:53
  • can you print var_dump($_SESSION); Commented May 18, 2014 at 13:54
  • You can't ++ on a variable that's not yet set. You must initialize it with a value beforehand if it doesn't exist. Commented May 18, 2014 at 13:54

1 Answer 1

1

try this

 case "add":
 if(!isset($_SESSION['cart'][$Item_ID])){
  $_SESSION['cart'][$Item_ID]=0;
 }
  $_SESSION['cart'][$Item_ID]++;
  break;

This should work because when you are gonna try to increment first time $_SESSION['cart'][$item_ID] it is not set

see this

$_SESSION['cart'][$Item_ID]++ is equvivalent to

$_SESSION['cart'][$Item_ID] = $_SESSION['cart'][$Item_ID] + 1;

in the above expression $_SESSION['cart'][$Item_ID] is undefined (on right-hand side of assignment)

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.