Simple Shopping Cart using Session in PHP

Submitted by: 
Language: 
Visitors have accessed this post 10767 times.

Getting Started

I've used Bootstrap in this tutorial which is a CSS framework and is included in the downloadable of this tutorial but if you want, you may download Bootstrap using this link.

Creating our Database

Next, we are going to create our database which contains the sample product that we are going to show.

I've included a .sql file in the downloadable of this tutorial which is a mysql database file. All you have to do is import the said file. If you have no idea on how to do this, please refer to my tutorial, https://www.sourcecodester.com/tutorials/sql/12049/how-import-sql-file-r....

You should be able to create a database with tables named database.

Displaying our Products

Next, we create the page to display products to our user. We do this by creating a new file, name it as index.php and paste the codes below.

  1. <?php
  2. //initialize cart if not set or is unset
  3. if(!isset($_SESSION['cart'])){
  4. $_SESSION['cart'] = array();
  5. }
  6.  
  7. //unset quantity
  8. unset($_SESSION['qty_array']);
  9. ?>
  10. <!DOCTYPE html>
  11. <html>
  12. <head>
  13. <meta charset="utf-8">
  14. <title>Simple Shopping Cart using Session in PHP</title>
  15. <link rel="stylesheet" type="text/css" href="bootstrap/css/bootstrap.min.css">
  16. <style>
  17. .product_image{
  18. height:200px;
  19. }
  20. .product_name{
  21. height:80px;
  22. padding-left:20px;
  23. padding-right:20px;
  24. }
  25. .product_footer{
  26. padding-left:20px;
  27. padding-right:20px;
  28. }
  29. </style>
  30. </head>
  31. <body>
  32. <div class="container">
  33. <nav class="navbar navbar-default">
  34. <div class="container-fluid">
  35. <div class="navbar-header">
  36. <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
  37. <span class="sr-only">Toggle navigation</span>
  38. <span class="icon-bar"></span>
  39. <span class="icon-bar"></span>
  40. <span class="icon-bar"></span>
  41. </button>
  42. <a class="navbar-brand" href="#">Simple Shopping Cart</a>
  43. </div>
  44.  
  45. <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
  46. <ul class="nav navbar-nav">
  47. <!-- left nav here -->
  48. </ul>
  49. <ul class="nav navbar-nav navbar-right">
  50. <li><a href="view_cart.php"><span class="badge"><?php echo count($_SESSION['cart']); ?></span> Cart <span class="glyphicon glyphicon-shopping-cart"></span></a></li>
  51. </ul>
  52. </div>
  53. </div>
  54. </nav>
  55. <?php
  56. //info message
  57. if(isset($_SESSION['message'])){
  58. ?>
  59. <div class="row">
  60. <div class="col-sm-6 col-sm-offset-6">
  61. <div class="alert alert-info text-center">
  62. <?php echo $_SESSION['message']; ?>
  63. </div>
  64. </div>
  65. </div>
  66. <?php
  67. unset($_SESSION['message']);
  68. }
  69. //end info message
  70. //fetch our products
  71. //connection
  72. $conn = new mysqli('localhost', 'root', '', 'database');
  73.  
  74. $sql = "SELECT * FROM products";
  75. $query = $conn->query($sql);
  76. $inc = 4;
  77. while($row = $query->fetch_assoc()){
  78. $inc = ($inc == 4) ? 1 : $inc + 1;
  79. if($inc == 1) echo "<div class='row text-center'>";
  80. ?>
  81. <div class="col-sm-3">
  82. <div class="panel panel-default">
  83. <div class="panel-body">
  84. <div class="row product_image">
  85. <img src="<?php echo $row['photo'] ?>" width="80%" height="auto">
  86. </div>
  87. <div class="row product_name">
  88. <h4><?php echo $row['name']; ?></h4>
  89. </div>
  90. <div class="row product_footer">
  91. <p class="pull-left"><b><?php echo $row['price']; ?></b></p>
  92. <span class="pull-right"><a href="add_cart.php?id=<?php echo $row['id']; ?>" class="btn btn-primary btn-sm"><span class="glyphicon glyphicon-plus"></span> Cart</a></span>
  93. </div>
  94. </div>
  95. </div>
  96. </div>
  97. <?php
  98. }
  99. if($inc == 1) echo "<div></div><div></div><div></div></div>";
  100. if($inc == 2) echo "<div></div><div></div></div>";
  101. if($inc == 3) echo "<div></div></div>";
  102.  
  103. //end product row
  104. ?>
  105. </div>
  106. </body>
  107. </html>

Creating our Add-to-Cart Script

Next, we are going to create our add to cart script which will add to our cart which is the form of PHP session.

Create a new file, name it as add_cart.php and paste the codes below.

  1. <?php
  2.  
  3. //check if product is already in the cart
  4. if(!in_array($_GET['id'], $_SESSION['cart'])){
  5. array_push($_SESSION['cart'], $_GET['id']);
  6. $_SESSION['message'] = 'Product added to cart';
  7. }
  8. else{
  9. $_SESSION['message'] = 'Product already in cart';
  10. }
  11.  
  12. header('location: index.php');
  13. ?>

Creating our View-Cart Page

Next, we create a page where the user can view his cart. Create a new file, name it as view_cart.php and paste the codes below.

  1. <?php
  2. ?>
  3. <!DOCTYPE html>
  4. <html>
  5. <head>
  6. <meta charset="utf-8">
  7. <title>Simple Shopping Cart using Session in PHP</title>
  8. <link rel="stylesheet" type="text/css" href="bootstrap/css/bootstrap.min.css">
  9. </head>
  10. <body>
  11. <div class="container">
  12. <nav class="navbar navbar-default">
  13. <div class="container-fluid">
  14. <div class="navbar-header">
  15. <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
  16. <span class="sr-only">Toggle navigation</span>
  17. <span class="icon-bar"></span>
  18. <span class="icon-bar"></span>
  19. <span class="icon-bar"></span>
  20. </button>
  21. <a class="navbar-brand" href="#">Simple Shopping Cart</a>
  22. </div>
  23.  
  24. <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
  25. <ul class="nav navbar-nav">
  26. <!-- left nav here -->
  27. </ul>
  28. <ul class="nav navbar-nav navbar-right">
  29. <li class="active"><a href="view_cart.php"><span class="badge"><?php echo count($_SESSION['cart']); ?></span> Cart <span class="glyphicon glyphicon-shopping-cart"></span></a></li>
  30. </ul>
  31. </div>
  32. </div>
  33. </nav>
  34. <h1 class="page-header text-center">Cart Details</h1>
  35. <div class="row">
  36. <div class="col-sm-8 col-sm-offset-2">
  37. <?php
  38. if(isset($_SESSION['message'])){
  39. ?>
  40. <div class="alert alert-info text-center">
  41. <?php echo $_SESSION['message']; ?>
  42. </div>
  43. <?php
  44. unset($_SESSION['message']);
  45. }
  46.  
  47. ?>
  48. <form method="POST" action="save_cart.php">
  49. <table class="table table-bordered table-striped">
  50. <thead>
  51. <th></th>
  52. <th>Name</th>
  53. <th>Price</th>
  54. <th>Quantity</th>
  55. <th>Subtotal</th>
  56. </thead>
  57. <tbody>
  58. <?php
  59. //initialize total
  60. $total = 0;
  61. if(!empty($_SESSION['cart'])){
  62. //connection
  63. $conn = new mysqli('localhost', 'root', '', 'database');
  64. //create array of initail qty which is 1
  65. $index = 0;
  66. if(!isset($_SESSION['qty_array'])){
  67. $_SESSION['qty_array'] = array_fill(0, count($_SESSION['cart']), 1);
  68. }
  69. $sql = "SELECT * FROM products WHERE id IN (".implode(',',$_SESSION['cart']).")";
  70. $query = $conn->query($sql);
  71. while($row = $query->fetch_assoc()){
  72. ?>
  73. <tr>
  74. <td>
  75. <a href="delete_item.php?id=<?php echo $row['id']; ?>&index=<?php echo $index; ?>" class="btn btn-danger btn-sm"><span class="glyphicon glyphicon-trash"></span></a>
  76. </td>
  77. <td><?php echo $row['name']; ?></td>
  78. <td><?php echo number_format($row['price'], 2); ?></td>
  79. <input type="hidden" name="indexes[]" value="<?php echo $index; ?>">
  80. <td><input type="text" class="form-control" value="<?php echo $_SESSION['qty_array'][$index]; ?>" name="qty_<?php echo $index; ?>"></td>
  81. <td><?php echo number_format($_SESSION['qty_array'][$index]*$row['price'], 2); ?></td>
  82. <?php $total += $_SESSION['qty_array'][$index]*$row['price']; ?>
  83. </tr>
  84. <?php
  85. $index ++;
  86. }
  87. }
  88. else{
  89. ?>
  90. <tr>
  91. <td colspan="4" class="text-center">No Item in Cart</td>
  92. </tr>
  93. <?php
  94. }
  95.  
  96. ?>
  97. <tr>
  98. <td colspan="4" align="right"><b>Total</b></td>
  99. <td><b><?php echo number_format($total, 2); ?></b></td>
  100. </tr>
  101. </tbody>
  102. </table>
  103. <a href="index.php" class="btn btn-primary"><span class="glyphicon glyphicon-arrow-left"></span> Back</a>
  104. <button type="submit" class="btn btn-success" name="save">Save Changes</button>
  105. <a href="clear_cart.php" class="btn btn-danger"><span class="glyphicon glyphicon-trash"></span> Clear Cart</a>
  106. <a href="checkout.php" class="btn btn-success"><span class="glyphicon glyphicon-check"></span> Checkout</a>
  107. </form>
  108. </div>
  109. </div>
  110. </div>
  111. </body>
  112. </html>

Creating our Delete Item Script

Next, we are going to create the script that removes item/s from the visitor's cart. Create a new file, name it as delete_item.php and paste the codes below.

  1. <?php
  2.  
  3. //remove the id from our cart array
  4. $key = array_search($_GET['id'], $_SESSION['cart']);
  5. unset($_SESSION['cart'][$key]);
  6.  
  7. unset($_SESSION['qty_array'][$_GET['index']]);
  8. //rearrange array after unset
  9. $_SESSION['qty_array'] = array_values($_SESSION['qty_array']);
  10.  
  11. $_SESSION['message'] = "Product deleted from cart";
  12. header('location: view_cart.php');
  13. ?>

Creating our Update Quantity Script

Initially, we have defined the quantities of added products to cart by 1. If ever the visitor wants to edit the quantity and saves it, this is the script that we are going to use.

Create a new file, name it as save_cart.php and paste the codes below.

  1. <?php
  2. if(isset($_POST['save'])){
  3. foreach($_POST['indexes'] as $key){
  4. $_SESSION['qty_array'][$key] = $_POST['qty_'.$key];
  5. }
  6.  
  7. $_SESSION['message'] = 'Cart updated successfully';
  8. header('location: view_cart.php');
  9. }
  10. ?>

Creating our remove-the-entire-cart Script

Next, we are going to create a script that whenever the visitor wants to clear his cart, the cart will reset.

Create a new file, name it as clear_cart.php and paste the codes below.

  1. <?php
  2. unset($_SESSION['cart']);
  3. $_SESSION['message'] = 'Cart cleared successfully';
  4. header('location: index.php');
  5. ?>

Creating our Checkout Redirection

Lastly, we create the script that will redirect our visitor if he clicks the checkout button which supposed to lead him to the login page but in this tutorial, we are going to create a simple message to our visitor.

Create a new file, name it as checkout.php and paste the codes below.

  1. <?php
  2. //user needs to login to checkout
  3. $_SESSION['message'] = 'You need to login to checkout';
  4. header('location: view_cart.php');
  5. ?>

That ends this tutorial. Happy Coding :)


Note: Due to the size or complexity of this submission, the author has submitted it as a .zip file to shorten your download time. After downloading it, you will need a program like Winzip to decompress it.

Virus note: All files are scanned once-a-day by SourceCodester.com for viruses, but new viruses come out every day, so no prevention program can catch 100% of them.

FOR YOUR OWN SAFETY, PLEASE:

1. Re-scan downloaded files using your personal virus checker before using it.
2. NEVER, EVER run compiled files (.exe's, .ocx's, .dll's etc.)--only run source code.

Comments

Hello Sir, by using your code, how do I store the session cart contents into the database by using MYSQLi?

zuzu

Yes! It would be fine to see the code with the log in.

That was smooth. Are you gonna include the user login for the tutorial? I would like to see your take on it. In the meanwhile, I'll try myself with login.

Add new comment

Filtered HTML

  • Web page addresses and e-mail addresses turn into links automatically.
  • You may insert videos with [video:URL]
  • Allowed HTML tags: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd> <table> <tr> <td> <th> <img> <h1> <h2> <h3> <iframe> [video]
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>, <asp>, <c>, <cpp>, <csharp>, <css>, <html4strict>, <java>, <javascript>, <mysql>, <php>, <python>, <sql>, <vb>, <vbnet>. The supported tag styles are: <foo>, [foo].
  • Lines and paragraphs break automatically.

Plain text

  • No HTML tags allowed.
  • Lines and paragraphs break automatically.
CAPTCHA
This question is for testing whether or not you are a human visitor and to prevent automated spam submissions.