This posts illustrates a relatively simple shopping cart in PHP using sessions to store cart details, quantities and total cart amount. The cart has an add to cart button , remove from cart button and displays the total value of the cart.
This post is taken from part of the book PHP Tutorials: Programming with PHP and MySQL which is available as a paper back printed version or as a downloadable Kindle version. Click here for paper back version.
The following listing is the complete shopping cart in PHP:
<?php session_start();
#cart.php - A simple shopping cart with add to cart, and remove links
//---------------------------
//initialize sessions
//Define the products and cost
$products = array("product A", "product B", "product C");
$amounts = array("19.99", "10.99", "2.99");
//Load up session
if ( !isset($_SESSION["total"]) ) {
$_SESSION["total"] = 0;
for ($i=0; $i< count($products); $i++) {
$_SESSION["qty"][$i] = 0;
$_SESSION["amounts"][$i] = 0;
}
}
//---------------------------
//Reset
if ( isset($_GET['reset']) )
{
if ($_GET["reset"] == 'true')
{
unset($_SESSION["qty"]); //The quantity for each product
unset($_SESSION["amounts"]); //The amount from each product
unset($_SESSION["total"]); //The total cost
unset($_SESSION["cart"]); //Which item has been chosen
}
}
//---------------------------
//Add
if ( isset($_GET["add"]) )
{
$i = $_GET["add"];
$qty = $_SESSION["qty"][$i] + 1;
$_SESSION["amounts"][$i] = $amounts[$i] * $qty;
$_SESSION["cart"][$i] = $i;
$_SESSION["qty"][$i] = $qty;
}
//---------------------------
//Delete
if ( isset($_GET["delete"]) )
{
$i = $_GET["delete"];
$qty = $_SESSION["qty"][$i];
$qty--;
$_SESSION["qty"][$i] = $qty;
//remove item if quantity is zero
if ($qty == 0) {
$_SESSION["amounts"][$i] = 0;
unset($_SESSION["cart"][$i]);
}
else
{
$_SESSION["amounts"][$i] = $amounts[$i] * $qty;
}
}
?>
<h2>List of All Products</h2>
<table>
<tr>
<th>Product</th>
<th width="10px"> </th>
<th>Amount</th>
<th width="10px"> </th>
<th>Action</th>
</tr>
<?php
for ($i=0; $i< count($products); $i++) {
?>
<tr>
<td><?php echo($products[$i]); ?></td>
<td width="10px"> </td>
<td><?php echo($amounts[$i]); ?></td>
<td width="10px"> </td>
<td><a href="?add=<?php echo($i); ?>">Add to cart</a></td>
</tr>
<?php
}
?>
<tr>
<td colspan="5"></td>
</tr>
<tr>
<td colspan="5"><a href="?reset=true">Reset Cart</a></td>
</tr>
</table>
<?php
if ( isset($_SESSION["cart"]) ) {
?>
<br/><br/><br/>
<h2>Cart</h2>
<table>
<tr>
<th>Product</th>
<th width="10px"> </th>
<th>Qty</th>
<th width="10px"> </th>
<th>Amount</th>
<th width="10px"> </th>
<th>Action</th>
</tr>
<?php
$total = 0;
foreach ( $_SESSION["cart"] as $i ) {
?>
<tr>
<td><?php echo( $products[$_SESSION["cart"][$i]] ); ?></td>
<td width="10px"> </td>
<td><?php echo( $_SESSION["qty"][$i] ); ?></td>
<td width="10px"> </td>
<td><?php echo( $_SESSION["amounts"][$i] ); ?></td>
<td width="10px"> </td>
<td><a href="?delete=<?php echo($i); ?>">Delete from cart</a></td>
</tr>
<?php
$total = $total + $_SESSION["amounts"][$i];
}
$_SESSION["total"] = $total;
?>
<tr>
<td colspan="7">Total : <?php echo($total); ?></td>
</tr>
</table>
<?php
}
?>
The cart example uses the following sessions to maintain the state of the cart:
$_SESSION[“qty”][i] Stores the quantity for each product
$_SESSION[“amounts”][i] Stores the price from each product
$_SESSION[“cart”][i] Identifies which items have been added to the cart
$_SESSION[“total”] Stores the total cost
The sessions are actually arrays so in the case of:
$_SESSION[“qty”][i]
is the quantity for the element with number i.
Description of the PHP shopping cart code
We start by defining PHP to use sessions by:
session_start();
This has to be at the very top of the PHP page.
Next we set up our products and populate our sessions. In this example we are using a fixed array of product descriptions and amounts. You may want to do this in your application or you could read in the data into the $product and $amounts array from a database.
//---------------------------
//initialise sessions
//Define the products and cost
$products = array("product A", "product B", "product C");
$amounts = array("19.99", "10.99", "2.99");
if ( !isset($_SESSION["total"]) ) {
$_SESSION["total"] = 0;
for ($i=0; $i< count($products); $i++) {
$_SESSION["qty"][$i] = 0;
$_SESSION["amounts"][$i] = 0;
}
}
The following code will reset and clear the sessions when the Reset Cart link is selected.
//---------------------------
//Reset
if ( isset($_GET['reset']) )
{
if ($_GET["reset"] == 'true')
{
unset($_SESSION["qty"]); //The quantity for each product
unset($_SESSION["amounts"]); //The amount from each product
unset($_SESSION["total"]); //The total cost
unset($_SESSION["cart"]); //Which item has been chosen
}
}
The following code adds an item to the sessions when the ‘Add to Cart’ link is clicked:
//---------------------------
//Add
if ( isset($_GET["add"]) )
{
$i = $_GET["add"];
$qty = $_SESSION["qty"][$i] + 1;
$_SESSION["amounts"][$i] = $amounts[$i] * $qty;
$_SESSION["cart"][$i] = $i;
$_SESSION["qty"][$i] = $qty;
}
and the following deletes an item from the cart when the ‘Delete from Cart’ link is clicked:
//---------------------------
//Delete
if ( isset($_GET["delete"]) )
{
$i = $_GET["delete"];
$qty = $_SESSION["qty"][$i];
$qty--;
$_SESSION["qty"][$i] = $qty;
//remove item if quantity is zero
if ($qty == 0) {
$_SESSION["amounts"][$i] = 0;
unset($_SESSION["cart"][$i]);
}
else
{
$_SESSION["amounts"][$i] = $amounts[$i] * $qty;
}
}
The rest of the code is the visual display using a table and various loops to show the product lists and the cart details together with the links.
This post is taken from part of the book PHP Tutorials: Programming with PHP and MySQL which is available as a paper back printed version or as a downloadable Kindle version. Click here for paper back version.
PHP-eSeller is a complete application that utilizes a shopping cart using PHP Sessions and is available from here:


