| 
  
 
  
     
      |  
         
          
          
            |  | 
   
    |  
        PHP สร้างระบบตะกร้าสั่งซื้อสินค้า Shopping Cart ด้วย Session และ Array (PHP กับ MySQL)       |  |   
            |  | PHP สร้างระบบตะกร้า Shopping Cart ด้วย Session และ Array  สำหรับตัวอย่าง Script นี้เป็นการสร้างระบบตะกร้าสินค้า หรือ Shopping Cart แบบง่าย ๆ โดยหลักการก็คือดึงข้อมูลจาก MySQL มาแสดง และให้ผู้ใช้ได้ทำการเลือกสินค้า ลงในตะกร้า โดยใช้ระบบจัดเก็บแบบ PHP Array ผ่าน Session โดยลูกค้าสามารถทำการเลือกสินค้าอื่น ๆ ได้ตลอดเวลาที่อยู่ในหน้าจอบนเว็บ โดยในตัวอย่างเมื่อลูกค้าได้เลือกสินค้าซ้ำกับสินค้าที่ได้เลือกแล้วก็จะมีการบวกหนึ่งให้อัตโนมัติ และสามารถลบรายการที่ได้เลือกไว้แล้ว รวมทั้งหน้าจอสำหรับ Checkout การกรอก ข้อมูลชื่อและที่อยู่ในการจัดส่งสินค้า และสุดท้ายหลังจากทำการ Checkout แล้วก็จะแสดงข้อมูลที่ได้ถูกกจัดเก็บลงในฐานข้อมูล MySQL พร้อมกับหมายเลข OrderID เพื่ออ้างอิง 
 Screenshot
 
 
  
 คุณสมบัติและความสามารถของตัวอย่างนี้
 - แสดงรายละเอียดสินค้าจากฐานข้อมูล MySQL
 - จัดเก็บข้อมูลการสั่งซื้อในรูปแบบ PHP และ Session
 - หน้าจอสำหรับ Checkout
 - หน้าจอแสดงรายละเอียดการสั่งซื้อ
 
 ตารางประกอบด้วย 3 ตารางคือ
 
 - product- orders
 - orders_detail
 
 โครงสร้างตาราง product เก็บรายละเอียดสินค้า
 
 
  
 โครงสร้างตาราง orders เก็บข้อมูลลูกค้าที่สั่งซื้อ และหมายเลข OrderID
 
 
  
 โครงสร้างตาราง orders_detail เก็บรายละเอียดของแต่ล่ะ OrderID
 
 
  
 
 ตารางของ MySQL
 
 
-- 
-- Table structure for table `orders`
-- 
CREATE TABLE `orders` (
  `OrderID` int(5) unsigned zerofill NOT NULL auto_increment,
  `OrderDate` datetime NOT NULL,
  `Name` varchar(100) NOT NULL,
  `Address` varchar(500) NOT NULL,
  `Tel` varchar(100) NOT NULL,
  `Email` varchar(100) NOT NULL,
  PRIMARY KEY  (`OrderID`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;
-- 
-- Dumping data for table `orders`
-- 
INSERT INTO `orders` VALUES (00001, '2012-03-15 09:59:13', 'Weerachai Nukitram', '1234 Lapharo Bangkok Thailand', '0819876107', '[email protected]');
INSERT INTO `orders` VALUES (00002, '2012-03-15 10:15:03', 'Weerachai Nukitram', '1234 Latpharo Bangkok Thailand', '0819876107', '[email protected]');
-- --------------------------------------------------------
-- 
-- Table structure for table `orders_detail`
-- 
CREATE TABLE `orders_detail` (
  `DetailID` int(5) NOT NULL auto_increment,
  `OrderID` int(5) unsigned zerofill NOT NULL,
  `ProductID` int(4) NOT NULL,
  `Qty` int(3) NOT NULL,
  PRIMARY KEY  (`DetailID`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;
-- 
-- Dumping data for table `orders_detail`
-- 
INSERT INTO `orders_detail` VALUES (1, 00001, 4, 1);
INSERT INTO `orders_detail` VALUES (2, 00002, 3, 3);
INSERT INTO `orders_detail` VALUES (3, 00002, 1, 1);
INSERT INTO `orders_detail` VALUES (4, 00002, 4, 1);
-- --------------------------------------------------------
-- 
-- Table structure for table `product`
-- 
CREATE TABLE `product` (
  `ProductID` int(4) NOT NULL auto_increment,
  `ProductName` varchar(100) NOT NULL,
  `Price` double NOT NULL,
  `Picture` varchar(100) NOT NULL,
  PRIMARY KEY  (`ProductID`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;
-- 
-- Dumping data for table `product`
-- 
INSERT INTO `product` VALUES (1, 'Product 1', 100, '1.gif');
INSERT INTO `product` VALUES (2, 'Product 2', 200, '2.gif');
INSERT INTO `product` VALUES (3, 'Product 3', 300, '3.gif');
INSERT INTO `product` VALUES (4, 'Product 4', 400, '4.gif');
 
 นำ Query ไปรันหรือสร้าง Database ตามโครงสร้าง
 
 
 
 Code ทั้งหมด
 
 product.php
 
 <?php
//session_start();
//session_destroy();
?><html>
<head>
<title>ThaiCreate.Com</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<?php
mysql_connect("localhost","root","root");
mysql_select_db("mydatabase");
$strSQL = "SELECT * FROM product";
$objQuery = mysql_query($strSQL)  or die(mysql_error());
?>
<table width="327"  border="1">
  <tr>
    <td width="101">Picture</td>
    <td width="101">ProductID</td>
    <td width="82">ProductName</td>
    <td width="79">Price</td>
    <td width="37">Cart</td>
  </tr>
  <?php
  while($objResult = mysql_fetch_array($objQuery))
  {
  ?>
  <tr>
	<td><img src="img/<?php echo $objResult["Picture"];?>"></td>
    <td><?php echo $objResult["ProductID"];?></td>
    <td><?php echo $objResult["ProductName"];?></td>
    <td><?php echo $objResult["Price"];?></td>
    <td><a href="order.php?ProductID=<?php echo $objResult["ProductID"];?>">Order</a></td>
  </tr>
  <?php
  }
  ?>
</table>
<br><br><a href="show.php">View Cart</a> | <a href="clear.php">Clear Cart</a>
<?php
mysql_close();
?>
</body>
</html>
 order.php
 
 <?php
ob_start();
session_start();
	
if(!isset($_SESSION["intLine"]))
{
	 $_SESSION["intLine"] = 0;
	 $_SESSION["strProductID"][0] = $_GET["ProductID"];
	 $_SESSION["strQty"][0] = 1;
	 header("location:show.php");
}
else
{
	
	$key = array_search($_GET["ProductID"], $_SESSION["strProductID"]);
	if((string)$key != "")
	{
		 $_SESSION["strQty"][$key] = $_SESSION["strQty"][$key] + 1;
	}
	else
	{
		
		 $_SESSION["intLine"] = $_SESSION["intLine"] + 1;
		 $intNewLine = $_SESSION["intLine"];
		 $_SESSION["strProductID"][$intNewLine] = $_GET["ProductID"];
		 $_SESSION["strQty"][$intNewLine] = 1;
	}
	
	 header("location:show.php");
}
?>
 show.php
 
 <?php
session_start();
?>
<html>
<head>
<title>ThaiCreate.Com</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<?php
if(!isset($_SESSION["intLine"]))
{
	echo "Cart empty";
	exit();
}
mysql_connect("localhost","root","root");
mysql_select_db("mydatabase");
?>
<table width="400"  border="1">
  <tr>
    <td width="101">ProductID</td>
    <td width="82">ProductName</td>
    <td width="82">Price</td>
    <td width="79">Qty</td>
    <td width="79">Total</td>
    <td width="10">Del</td>
  </tr>
  <?php
  $Total = 0;
  $SumTotal = 0;
  for($i=0;$i<=(int)$_SESSION["intLine"];$i++)
  {
	  if($_SESSION["strProductID"][$i] != "")
	  {
		$strSQL = "SELECT * FROM product WHERE ProductID = '".$_SESSION["strProductID"][$i]."' ";
		$objQuery = mysql_query($strSQL)  or die(mysql_error());
		$objResult = mysql_fetch_array($objQuery);
		$Total = $_SESSION["strQty"][$i] * $objResult["Price"];
		$SumTotal = $SumTotal + $Total;
	  ?>
	  <tr>
		<td><?php echo $_SESSION["strProductID"][$i];?></td>
		<td><?php echo $objResult["ProductName"];?></td>
		<td><?php echo $objResult["Price"];?></td>
		<td><?php echo $_SESSION["strQty"][$i];?></td>
		<td><?php echo number_format($Total,2);?></td>
		<td><a href="delete.php?Line=<?php echo $i;?>">x</a></td>
	  </tr>
	  <?php
	  }
  }
  ?>
</table>
Sum Total <?php echo number_format($SumTotal,2);?>
<br><br><a href="product.php">Go to Product</a>
<?php
	if($SumTotal > 0)
	{
?>
	| <a href="checkout.php">CheckOut</a>
<?php
	}
?>
<?php
mysql_close();
?>
</body>
</html>
 delete.php
 
 <?php
	ob_start();
	session_start();
	$Line = $_GET["Line"];
	$_SESSION["strProductID"][$Line] = "";
	$_SESSION["strQty"][$Line] = "";
	header("location:show.php");
?>
 checkout.php
 
 <?php
session_start();
?>
<html>
<head>
<title>ThaiCreate.Com</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<?php
mysql_connect("localhost","root","root");
mysql_select_db("mydatabase");
?>
<table width="400"  border="1">
  <tr>
    <td width="101">ProductID</td>
    <td width="82">ProductName</td>
    <td width="82">Price</td>
    <td width="79">Qty</td>
    <td width="79">Total</td>
  </tr>
  <?php
  $Total = 0;
  $SumTotal = 0;
  for($i=0;$i<=(int)$_SESSION["intLine"];$i++)
  {
	  if($_SESSION["strProductID"][$i] != "")
	  {
		$strSQL = "SELECT * FROM product WHERE ProductID = '".$_SESSION["strProductID"][$i]."' ";
		$objQuery = mysql_query($strSQL)  or die(mysql_error());
		$objResult = mysql_fetch_array($objQuery);
		$Total = $_SESSION["strQty"][$i] * $objResult["Price"];
		$SumTotal = $SumTotal + $Total;
	  ?>
	  <tr>
		<td><?php echo $_SESSION["strProductID"][$i];?></td>
		<td><?php echo $objResult["ProductName"];?></td>
		<td><?php echo $objResult["Price"];?></td>
		<td><?php echo $_SESSION["strQty"][$i];?></td>
		<td><?php echo number_format($Total,2);?></td>
	  </tr>
	  <?php
	  }
  }
  ?>
</table>
Sum Total <?php echo number_format($SumTotal,2);?>
<br><br>
<form name="form1" method="post" action="save_checkout.php">
  <table width="304" border="1">
    <tr>
      <td width="71">Name</td>
      <td width="217"><input type="text" name="txtName"></td>
    </tr>
    <tr>
      <td>Address</td>
      <td><textarea name="txtAddress"></textarea></td>
    </tr>
    <tr>
      <td>Tel</td>
      <td><input type="text" name="txtTel"></td>
    </tr>
    <tr>
      <td>Email</td>
      <td><input type="text" name="txtEmail"></td>
    </tr>
  </table>
    <input type="submit" name="Submit" value="Submit">
</form>
<?php
mysql_close();
?>
</body>
</html>
 save_checkout.php
 
 <?php
session_start();
mysql_connect("localhost","root","root");
mysql_select_db("mydatabase");
  $Total = 0;
  $SumTotal = 0;
  $strSQL = "
	INSERT INTO orders (OrderDate,Name,Address,Tel,Email)
	VALUES
	('".date("Y-m-d H:i:s")."','".$_POST["txtName"]."','".$_POST["txtAddress"]."' ,'".$_POST["txtTel"]."','".$_POST["txtEmail"]."') 
  ";
  mysql_query($strSQL) or die(mysql_error());
  $strOrderID = mysql_insert_id();
  for($i=0;$i<=(int)$_SESSION["intLine"];$i++)
  {
	  if($_SESSION["strProductID"][$i] != "")
	  {
			  $strSQL = "
				INSERT INTO orders_detail (OrderID,ProductID,Qty)
				VALUES
				('".$strOrderID."','".$_SESSION["strProductID"][$i]."','".$_SESSION["strQty"][$i]."') 
			  ";
			  mysql_query($strSQL) or die(mysql_error());
	  }
  }
mysql_close();
session_destroy();
header("location:finish_order.php?OrderID=".$strOrderID);
?>
 finish_order.php
 
 <html>
<head>
<title>ThaiCreate.Com</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
Finish Your Order. <br><br>
<a href="view_order.php?OrderID=<?php echo $_GET["OrderID"];?>">View Order</a>
</body>
</html>
 
 view_order.php
 
 <html>
<head>
<title>ThaiCreate.Com</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<?php
mysql_connect("localhost","root","root");
mysql_select_db("mydatabase");
$strSQL = "SELECT * FROM orders WHERE OrderID = '".$_GET["OrderID"]."' ";
$objQuery = mysql_query($strSQL)  or die(mysql_error());
$objResult = mysql_fetch_array($objQuery);
?>
 <table width="304" border="1">
    <tr>
      <td width="71">OrderID</td>
      <td width="217">
	  <?php echo $objResult["OrderID"];?></td>
    </tr>
    <tr>
      <td width="71">Name</td>
      <td width="217">
	  <?php echo $objResult["Name"];?></td>
    </tr>
    <tr>
      <td>Address</td>
      <td><?php echo $objResult["Address"];?></td>
    </tr>
    <tr>
      <td>Tel</td>
      <td><?php echo $objResult["Tel"];?></td>
    </tr>
    <tr>
      <td>Email</td>
      <td><?php echo $objResult["Email"];?></td>
    </tr>
  </table>
  <br>
<table width="400"  border="1">
  <tr>
    <td width="101">ProductID</td>
    <td width="82">ProductName</td>
    <td width="82">Price</td>
    <td width="79">Qty</td>
    <td width="79">Total</td>
  </tr>
<?php
$Total = 0;
$SumTotal = 0;
$strSQL2 = "SELECT * FROM orders_detail WHERE OrderID = '".$_GET["OrderID"]."' ";
$objQuery2 = mysql_query($strSQL2)  or die(mysql_error());
while($objResult2 = mysql_fetch_array($objQuery2))
{
		$strSQL3 = "SELECT * FROM product WHERE ProductID = '".$objResult2["ProductID"]."' ";
		$objQuery3 = mysql_query($strSQL3)  or die(mysql_error());
		$objResult3 = mysql_fetch_array($objQuery3);
		$Total = $objResult2["Qty"] * $objResult3["Price"];
		$SumTotal = $SumTotal + $Total;
	  ?>
	  <tr>
		<td><?php echo $objResult2["ProductID"];?></td>
		<td><?php echo $objResult3["ProductName"];?></td>
		<td><?php echo $objResult3["Price"];?></td>
		<td><?php echo $objResult2["Qty"];?></td>
		<td><?php echo number_format($Total,2);?></td>
	  </tr>
	  <?php
 }
  ?>
</table>
Sum Total <?php echo number_format($SumTotal,2);?>
<?php
mysql_close();
?>
</body>
</html>
 clear.php
 
 <?php
	ob_start();
	session_start();
	session_destroy();
	header("location:show.php");
?>
 
 
 Screenshot
 
 
  
 หน้าจอ Screen แสดงสินค้า เมื่อคลิกที่ Order ระบบก็จะทำการเก็บสินค้าลงใน Cart
 
 
 
  
 หน้าจอ Screen แสดง Cart ที่ได้เลือกไว้
 
 
 
  
 หน้าจอสำหรับ Checkout และกรอกข้อมูลลูกค้า
 
 
 
  
 หน้าจอบันทึกข้อมูลเรียบร้อยแล้ว
 
 
 
  
 หน้าจอแสดงรายละเอียดสั่งซื้อหลังจากเสร็จสิ้นกระบวนการแล้ว
 
 
 Download Code !!
 
 
 บทความอื่น ๆ ที่เกี่ยวข้อง
 Go to : Ajax Shopping Cart (PHP+MySQL and ASP+Access)
 Go to : PHP MySQL Multiple Column
 Go to : PHP Session ($_SESSION,$HTTP_SESSION_VARS)
 Go to : เห็นถามกันบ่อยๆ php เก็บสินค้าลงในตะกร้าลง ด้วย session แบบไม่ให้เลือกสินค้าซ้ำ หรือ เลือกซ้ำแล้วจะให้บวกเพิ่มทีล่ะหนึ่ง
 
 
 ตอนที่ 2 พัฒนาเพิ่มให้สามารถแก้ไขจำนวน Qty ที่สั่งได้
 
 แบบที่ 1 : แบบแก้ไขผ่าน Textbox
 
 
  
 
  
 แบบที่ 2 : แบบแก้ไขผ่าน Select แบบ List
 
 
  
 
  
 Go to : Part 2 : PHP ระบบตะกร้าสินค้า (Shopping Cart) แบบระบุจำนวน และ แก้ไขจำนวน ที่สั่ง (Qty) ได้
 
 Go to : PHP กับ MySQL (mysqli function )สร้าง Shopping Cart ตะกร้าสินค้า ง่าย ๆ ด้วย PHP
 
 
 
                           
                             |  |  |  |  
                             |  |  |  
 |  
          
            | 
                
                  |  |  
                  |  | Score Rating : |    |  
                  |  | Create Date : | 2012-03-15 10:42:54 |  
                  |  | View : | 226,667 |  
                  |  | Download : | No files |  
                  |  |  |  |  |  |  |   |