8

I'm creating a site which has a shopping cart. I do not need any special functionality so I'm creating the cart on my own rather than integrating any ready one. My products do not have a predefined price in the database. The price is being generated dynamically based on the values entered by a user on the product page. So, the user chooses some specifications, enters the quantity and I get the following values:

Item ID
Quantity
Total price

I need to store those values in the $_SESSION variable and then loop over it when needed to get the results and print them in the shopping cart. The problem is that there are a lot of products and I need to store all those values (Quantity, Total Price) distinctively for the chosen product. That said, how do I store Item ID, Quantity and Total price in the $_SESSION variable and associate those values with each other?

Thanks for helping.

EDIT: My code implementing Michael's suggestions:

$itemid = $db->escape($_POST['productid']);
    $itemquantity = $db->escape($_POST['itemquantity']);
    $totalprice = $db->escape($_POST['totalprice']);

    $_SESSION['items'] = array();

    $_SESSION['items'][$itemid] = array('Quantity' => $itemquantity, 'Total' => $totalprice);

    var_dump($_SESSION);
2
  • simple multidimensional array would do. Commented Jan 22, 2012 at 20:40
  • 1
    $_SESSION[] itself is an array. you can store arrays into it too. Commented Jan 22, 2012 at 20:41

1 Answer 1

11

Use the item ID as an array key, which holds an array of the other items:

// Initialize the session
session_start();

// Parent array of all items, initialized if not already...
if (!isset($_SESSION['items']) {
  $_SESSION['items'] = array();
}

// Add items based on item ID
$_SESSION['items'][$itemID] = array('Quantity' => $quantity, 'Total' => $total);
// Another item...
$_SESSION['items'][$another_itemID] = array('Quantity' => $another_quantity, 'Total' => $another_total);
// etc...

And access them as:

// For item 12345's quantity
echo $_SESSION['items'][12345]['Quantity'];

// Add 1 to quantity for item 54321
$_SESSION['items'][54321]['Quantity']++;
Sign up to request clarification or add additional context in comments.

12 Comments

Thanks Michael! However this erases the existing values in the $_SESSION variable. Say, I've added one set of values with $itemID=29 and then when I add another one with $itemID=30 my $_SESSION variable contains only the last set of data.
@cycero Not so. $_SESSION['items'] is an array. Each time you add an item to it with $_SESSION['items'][$newitemID] you're adding to the array, not overwriting the previous one.
When I do a simple print_r($_SESSION) it prints only the last set of values, not all.
@cycero Post your current code implementing what I have above, and the var_dump($_SESSION)
I've updated my question with the code which returns only the last result set.
|

Your Answer

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

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.