หัวใจสำคัญของเว็บ E-Commerce คือระบบ "ตะกร้าสินค้า" ครับ โจทย์คือเราจะทำอย่างไรให้เว็บไซต์จำได้ว่า ลูกค้าเลือกหยิบสินค้าชิ้นไหน? จำนวนเท่าไหร่? ในขณะที่เขาเปลี่ยนหน้าเว็บไปมา
คำตอบคือการใช้ PHP Session ครับ บทความนี้จะพาคุณไปสร้างระบบตะกร้าสินค้าพื้นฐาน แบบ Step-by-Step ครับ
เนื่องจาก 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)
เพื่อให้โค้ดชุดนี้ทำงานได้เลยโดยไม่ต้องไปสร้าง 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"]
];
?>หน้านี้จะแสดงรายการสินค้าทั้งหมด และมีปุ่ม "หยิบใส่ตะกร้า" ที่ลิงก์ไปยังไฟล์ 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>ไฟล์นี้คือหัวใจสำคัญ ทำหน้าที่รับค่ามา แล้วเช็คว่าใน 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();
?>หน้านี้จะทำการ 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>นี่คือพื้นฐานที่สุดของระบบตะกร้าสินค้า คุณสามารถนำไปต่อยอดได้โดยการเปลี่ยนจากไฟล์ db.php เป็นการดึงข้อมูลจาก MySQL Database จริงๆ และเพิ่มฟีเจอร์เช่น การแก้ไขจำนวนสินค้าในหน้าตะกร้า หรือการคำนวณส่วนลดครับ