• ติดตามบน
Workshop: สร้างระบบตะกร้าสินค้า (Shopping Cart)

Workshop: สร้างระบบตะกร้าสินค้า (Shopping Cart)

Chalothorn Kosakul 05-02-2026 34

หัวใจสำคัญของเว็บ E-Commerce คือระบบ "ตะกร้าสินค้า" ครับ โจทย์คือเราจะทำอย่างไรให้เว็บไซต์จำได้ว่า ลูกค้าเลือกหยิบสินค้าชิ้นไหน? จำนวนเท่าไหร่? ในขณะที่เขาเปลี่ยนหน้าเว็บไปมา

คำตอบคือการใช้ PHP Session ครับ บทความนี้จะพาคุณไปสร้างระบบตะกร้าสินค้าพื้นฐาน แบบ Step-by-Step ครับ


หลักการทำงาน (Concept)

เนื่องจาก Protocol HTTP เป็นแบบ Stateless (จำสถานะไม่ได้) เราจึงต้องใช้ Session มาช่วยเก็บข้อมูล โดยเราจะเก็บข้อมูลตะกร้าสินค้าในรูปแบบ Array ไว้ในตัวแปร Session ครับ

โครงสร้างข้อมูลที่เราจะเก็บใน $_SESSION['cart'] จะมีหน้าตาประมาณนี้:

$_SESSION['cart'] = [
    'product_id_1' => 2,  // สินค้า ID 1 จำนวน 2 ชิ้น
    'product_id_5' => 1,  // สินค้า ID 5 จำนวน 1 ชิ้น
];

(ใช้ Product ID เป็น Key และใช้ จำนวนสินค้า เป็น Value)


Step 1: จำลองข้อมูลสินค้า (db.php)

เพื่อให้โค้ดชุดนี้ทำงานได้เลยโดยไม่ต้องไปสร้าง Database จริง เราจะสร้างไฟล์ db.php เพื่อจำลองรายการสินค้าเป็น Array ครับ

<?php
// db.php - จำลองฐานข้อมูลสินค้า
$products = [
    1 => ["name" => "เสื้อยืดคอกลม", "price" => 250, "img" => "shirt.jpg"],
    2 => ["name" => "กางเกงยีนส์", "price" => 890, "img" => "jeans.jpg"],
    3 => ["name" => "รองเท้าผ้าใบ", "price" => 1200, "img" => "shoes.jpg"]
];
?>

Step 2: หน้ารายการสินค้า (index.php)

หน้านี้จะแสดงรายการสินค้าทั้งหมด และมีปุ่ม "หยิบใส่ตะกร้า" ที่ลิงก์ไปยังไฟล์ action ครับ

<?php
session_start();
require 'db.php';
?>
<!DOCTYPE html>
<html>
<head>
    <title>รายการสินค้า</title>
    <style> table { border-collapse: collapse; width: 100%; } th, td { border: 1px solid #ddd; padding: 8px; } </style>
</head>
<body>

<h1>Product List</h1>
<!-- แสดงลิงก์ไปตะกร้า พร้อมนับจำนวนสินค้าในตะกร้า -->
<a href="cart.php">ตะกร้าสินค้า ( <?php echo isset($_SESSION['cart']) ? count($_SESSION['cart']) : 0; ?> )</a>
<br><br>

<table>
    <tr>
        <th>ID</th>
        <th>ชื่อสินค้า</th>
        <th>ราคา</th>
        <th>Action</th>
    </tr>
    <?php foreach($products as $id => $product): ?>
    <tr>
        <td><?php echo $id; ?></td>
        <td><?php echo $product['name']; ?></td>
        <td><?php echo number_format($product['price']); ?></td>
        <td>
            <!-- ส่ง product_id ไปที่ cart-action.php -->
            <a href="cart-action.php?action=add&id=<?php echo $id; ?>">หยิบใส่ตะกร้า</a>
        </td>
    </tr>
    <?php endforeach; ?>
</table>

</body>
</html>

Step 3: ตัวจัดการตะกร้า (cart-action.php)

ไฟล์นี้คือหัวใจสำคัญ ทำหน้าที่รับค่ามา แล้วเช็คว่าใน Session มีสินค้านั้นหรือยัง? ถ้ามีแล้วให้บวกจำนวนเพิ่ม ถ้ายังไม่มีให้สร้างใหม่

<?php
session_start();

// รับค่า id สินค้า และ action
$p_id = $_GET['id']; 
$act = $_GET['action'];

// ตรวจสอบว่ามีตะกร้าหรือยัง ถ้าไม่มีให้สร้าง Array ว่าง
if(!isset($_SESSION['cart'])) {
    $_SESSION['cart'] = array();
}

// 1. กรณีหยิบของใส่ตะกร้า (Add)
if($act == 'add' && !empty($p_id)) {
    if(isset($_SESSION['cart'][$p_id])) {
        // ถ้ามีของชิ้นนี้อยู่แล้ว ให้บวกจำนวนเพิ่ม
        $_SESSION['cart'][$p_id]++;
    } else {
        // ถ้ายังไม่มี ให้เริ่มนับ 1
        $_SESSION['cart'][$p_id] = 1;
    }
}

// 2. กรณีลบของออกจากตะกร้า (Delete)
if($act == 'delete' && !empty($p_id)) {
    unset($_SESSION['cart'][$p_id]);
}

// 3. กรณีเคลียร์ตะกร้า (Clear)
if($act == 'clear') {
    unset($_SESSION['cart']);
}

// ทำงานเสร็จส่งกลับไปหน้า cart.php หรือ index.php
header("Location: cart.php");
exit();
?>

Step 4: หน้าตะกร้าสินค้า (cart.php)

หน้านี้จะทำการ Loop ข้อมูลใน Session ออกมา แล้วนำ ID ไปเทียบกับข้อมูลจริงใน db.php เพื่อคำนวณราคารวม

<?php
session_start();
require 'db.php'; 
?>
<!DOCTYPE html>
<html>
<head><title>ตะกร้าสินค้า</title></head>
<body>

<h1>Your Shopping Cart</h1>
<a href="index.php">< กลับไปเลือกสินค้า</a> | 
<a href="cart-action.php?action=clear" onclick="return confirm('ยืนยันลบทั้งหมด?');">ล้างตะกร้าสินค้า</a>
<br><br>

<table border="1" cellpadding="10" cellspacing="0">
    <tr>
        <th>สินค้า</th>
        <th>ราคาต่อชิ้น</th>
        <th>จำนวน</th>
        <th>ราคารวม</th>
        <th>ลบ</th>
    </tr>

    <?php 
    $total_price = 0;
    // ตรวจสอบว่าตะกร้าว่างหรือไม่
    if(!empty($_SESSION['cart'])) {
        foreach($_SESSION['cart'] as $p_id => $qty) {
            // ดึงข้อมูลสินค้าจาก db.php ตาม ID
            $row = $products[$p_id];
            $sum = $row['price'] * $qty;
            $total_price += $sum;
    ?>
            <tr>
                <td><?php echo $row['name']; ?></td>
                <td><?php echo number_format($row['price']); ?></td>
                <td><?php echo $qty; ?></td>
                <td><?php echo number_format($sum); ?></td>
                <td>
                    <a href="cart-action.php?action=delete&id=<?php echo $p_id; ?>" style="color:red;">X</a>
                </td>
            </tr>
    <?php 
        } // end foreach 
    } else {
        echo "<tr><td colspan='5' align='center'>ไม่มีสินค้าในตะกร้า</td></tr>";
    }
    ?>

    <tr>
        <td colspan="3" align="right"><strong>ยอดรวมทั้งหมด</strong></td>
        <td colspan="2"><strong><?php echo number_format($total_price); ?> บาท</strong></td>
    </tr>
</table>

</body>
</html>

สรุปสิ่งที่ต้องจำ

  • session_start(); ต้องประกาศไว้บรรทัดแรกสุดของทุกไฟล์ที่จะใช้งาน Session
  • Key ของ Array ใน Session มักใช้เป็น ID สินค้า เพื่อให้ง่ายต่อการค้นหาและอัปเดตจำนวน
  • Flow การทำงาน: คลิกหยิบของ -> ส่ง ID ไปไฟล์ Action -> อัปเดต Session -> Redirect กลับมาแสดงผล

นี่คือพื้นฐานที่สุดของระบบตะกร้าสินค้า คุณสามารถนำไปต่อยอดได้โดยการเปลี่ยนจากไฟล์ db.php เป็นการดึงข้อมูลจาก MySQL Database จริงๆ และเพิ่มฟีเจอร์เช่น การแก้ไขจำนวนสินค้าในหน้าตะกร้า หรือการคำนวณส่วนลดครับ


แชร์บทความนี้