[PHP] Shopping Cart ด้วยตัวแปร Session

Credit : https://beproblemsolver.com/simple-php-shopping-cart-with-session/ 

header.php

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>Simple Cart</title>
</head>

<body>
  <a href="index.php">Index</a> |
  <a href="cart.php">Cart
  <?php if (isset($_SESSION['cart'])) : ?>
  <?php   echo count($_SESSION['cart']);; ?>
  <?php endif; ?>
  </a>

footer.php

</body>
</html>

index.php

<?php
session_start();

if (isset($_GET['pro_id'])) {
  $proid = $_GET['pro_id'];
 
  if (!empty($_SESSION['cart'])) {
    $acol = array_column($_SESSION['cart'], 'pro_id');
    if (in_array($proid, $acol)) {
      $_SESSION['cart'][$proid]['qty'] += 1;
    } else {
      $item = ['pro_id' => $_GET['pro_id'], 'qty' => 1];
      $_SESSION['cart'][$proid] = $item;
    }
  } else {
    $item = ['pro_id' => $_GET['pro_id'], 'qty' => 1];
    $_SESSION['cart'][$proid] = $item;
  }
}
?>
<?php include 'header.php'; ?>
  <h2>Simple Cart (Core PHP)</h2>
  Product 1 <a href="index.php?pro_id=1">Add to Cart</a><br>
  Product 2 <a href="index.php?pro_id=2">Add to Cart</a><br>
  Product 3 <a href="index.php?pro_id=3">Add to Cart</a><br>

<?php include 'footer.php'; ?>
arrary ของตัวแปร session ที่เกิดขึ้น
คำอธิบายประกอบแต่ละบรรทัด
if (isset($_GET['pro_id'])) {
  # กำหนดค่า proid ซึ่งรับจาก get
  $proid = $_GET['pro_id']; 

  if (!empty($_SESSION['cart'])) { # กรณีมีตัวแปรเซสชัน cart อยู่แล้ว

    # ดึงเฉพาะค่า pro_id ทั้งหมดใน cart ออกมา (เป็น array of pro_id)
    $acol = array_column($_SESSION['cart'], 'pro_id');

    if (in_array($proid, $acol)) { # กรณี id ที่รับมาจาก get อยู่ใน cart อยู่แล้ว
      
      # เพิ่มจำนวนสินค้านั้นเข้าไป 
      $_SESSION['cart'][$proid]['qty'] += 1; 
    
    } else { # กรณี id ที่รับมาจาก get นั้น ยังไม่เคยอยู่ใน cart 
      
      # กำหนดค่าให้ item ที่จะเพิ่ม
      $item = ['pro_id' => $_GET['pro_id'], 'qty' => 1];
      
      # แล้วเอาค่า item มาใส่ cart
      $_SESSION['cart'][$proid] = $item;
    }
  } else { # กรณียังไม่เคยมีตัวแปรเซสชัน cart มาก่อน

    # กำหนดค่าให้ item ที่จะเพิ่ม
    $item = ['pro_id' => $_GET['pro_id'], 'qty' => 1]; 

    # สร้างเซสชัน cart แล้วเอาค่า item มาใส่ cart
    $_SESSION['cart'][$proid] = $item; 
  }
}

cart.php

<?php session_start(); ?>

<?php include 'header.php'; ?>

 | <a href="emptycart.php">Empty Cart</a><br><br>
  <table border="1">
    <thead>
      <tr>
        <th>S.no</th>
        <th>Product Name</th>
        <th>Quantity</th>
        <th colspan="2">Action</th>
      </tr>
    </thead>
    <tbody>
      <?php
      if (isset($_SESSION['cart'])) :
        $i = 1;
        foreach ($_SESSION['cart'] as $cart) :
      ?>
          <tr>
            <td><?php echo $i; ?> # </td>
            <td> Product <?= $cart['pro_id']; ?></td>
            <td>
              <form action="update.php" method="post">
                <input type="number" value="<?= $cart['qty']; ?>" name="qty" min="1">
                <input type="hidden" value="<?= $cart['pro_id']; ?>" name="upid" >
            </td>
            <td>
                <input type="submit" name="update" value="Update">
              </form>
            </td>
            <td><a href="removecartitem.php?id=<?= $cart['pro_id']; ?>">Remove</a></td>
          </tr>
      <?php
          $i++;
        endforeach;
      endif;
      ?>
    </tbody>
  </table>
<?php include 'footer.php'; ?>

update.php

<?php
session_start();

if ($_POST['update']) {

  $upid = $_POST['upid'];
  $acol = array_column($_SESSION['cart'], 'pro_id');

  if (in_array($_POST['upid'], $acol)) {
    $_SESSION['cart'][$upid]['qty'] = $_POST['qty'];
  } else {
    $item = ['pro_id' => $upid,'qty' => 1];
    $_SESSION['cart'][$upid] = $item;
  }

  header("location: cart.php");
}

removecartitem.php

<?php
session_start();

if (isset($_GET['id'])) {
  $proid = $_GET['id'];

  unset($_SESSION['cart'][$proid]);
  header("location: cart.php");
}
?>

emptycart.php

<?php
session_start();
unset($_SESSION['cart']);
header("location: cart.php");
?>


Previous
Next Post »