|  
  
     
      |  
         
           
            |  | 
 
  PHP กับ MySQL (mysqli function) สร้าง Shopping Cart ตะกร้าสินค้า ง่าย ๆ ด้วย PHP สำหรับตัวอย่าง Script นี้เป็นการสร้างระบบตะกร้าสินค้า หรือ Shopping Cart แบบง่าย ๆ ด้วย ฟังก์ชั่น mysqli ร่วมกับ PHP/MySQL โดยหลักการก็คือดึงข้อมูลจาก MySQL มาแสดง และให้ผู้ใช้ได้ทำการเลือกสินค้า ลงในตะกร้า โดยใช้ระบบจัดเก็บแบบ PHP Array ผ่าน Session โดยลูกค้าสามารถทำการเลือกสินค้าอื่น ๆ ได้ตลอดเวลาที่อยู่ในหน้าจอบนเว็บ โดยในตัวอย่างเมื่อลูกค้าได้เลือกสินค้าซ้ำกับสินค้าที่ได้เลือกแล้วก็จะมีการบวกหนึ่งให้อัตโนมัติ และสามารถลบรายการที่ได้เลือกไว้แล้ว รวมทั้งหน้าจอสำหรับ Checkout การกรอก ข้อมูลชื่อและที่อยู่ในการจัดส่งสินค้า และสุดท้ายหลังจากทำการ Checkout แล้วก็จะแสดงข้อมูลที่ได้ถูกกจัดเก็บลงในฐานข้อมูล MySQL พร้อมกับหมายเลข OrderID เพื่ออ้างอิง 
    |  
        PHP กับ MySQL (mysqli function) สร้าง Shopping Cart ตะกร้าสินค้า ง่าย ๆ ด้วย PHP + mysqli       |  
 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
 
 <html>
<head>
<title>ThaiCreate.Com</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<?php
ini_set('display_errors', 1);
error_reporting(~0);
$serverName = "localhost";
$userName = "root";
$userPassword = "root";
$dbName = "mydatabase";
$objCon = mysqli_connect($serverName,$userName,$userPassword,$dbName);
if (!$objCon) {
    echo $objCon->connect_error;
    exit();
}
$strSQL = "SELECT * FROM product";
$objQuery = mysqli_query($objCon,$strSQL);
if(!$objQuery)
{
	echo $objCon->error;
	exit();
}
?>
<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 = mysqli_fetch_array($objQuery,MYSQLI_ASSOC))
  {
  ?>
  <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
mysqli_close($objCon);
?>
</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();
}
$serverName = "localhost";
$userName = "root";
$userPassword = "root";
$dbName = "mydatabase";
$objCon = mysqli_connect($serverName,$userName,$userPassword,$dbName);
if (!$objCon) {
    echo $objCon->connect_error;
    exit();
}
?>
<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 = mysqli_query($objCon,$strSQL);
		$objResult = $objResult = mysqli_fetch_array($objQuery,MYSQLI_ASSOC);
		$Total = $_SESSION["strQty"][$i] * $objResult["Price"];
		$SumTotal = $SumTotal + $Total;
	  ?>
	  <tr>
		<td><?=$_SESSION["strProductID"][$i];?></td>
		<td><?=$objResult["ProductName"];?></td>
		<td><?=$objResult["Price"];?></td>
		<td><?=$_SESSION["strQty"][$i];?></td>
		<td><?=number_format($Total,2);?></td>
		<td><a href="delete.php?Line=<?=$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
mysqli_close($objCon);
?>
</body>
</html>
 
 
 delete.php
 
 <?php
	ob_start();
	session_start();
	
	if(isset($_GET["Line"]))
	{
		$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
if(!isset($_SESSION["intLine"]))
{
	echo "Cart Empty";
	exit();
}
$serverName = "localhost";
$userName = "root";
$userPassword = "root";
$dbName = "mydatabase";
$objCon = mysqli_connect($serverName,$userName,$userPassword,$dbName);
if (!$objCon) {
    echo $objCon->connect_error;
    exit();
}
?>
<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 = mysqli_query($objCon,$strSQL);
		$objResult = $objResult = mysqli_fetch_array($objQuery,MYSQLI_ASSOC);
		$Total = $_SESSION["strQty"][$i] * $objResult["Price"];
		$SumTotal = $SumTotal + $Total;
	  ?>
	  <tr>
		<td><?=$_SESSION["strProductID"][$i];?></td>
		<td><?=$objResult["ProductName"];?></td>
		<td><?=$objResult["Price"];?></td>
		<td><?=$_SESSION["strQty"][$i];?></td>
		<td><?=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
mysqli_close($objCon);
?>
</body>
</html>
 save_checkout.php
 
 <?php
session_start();
$serverName = "localhost";
$userName = "root";
$userPassword = "root";
$dbName = "mydatabase";
$objCon = mysqli_connect($serverName,$userName,$userPassword,$dbName);
if (!$objCon) {
	echo $objCon->connect_error;
	exit();
}
  $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"]."') 
  ";
  $objQuery = mysqli_query($objCon,$strSQL);
  if(!$objQuery)
  {
	echo $objCon->error;
	exit();
  }
  $strOrderID = mysqli_insert_id($objCon);
  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]."') 
			  ";
			  mysqli_query($objCon,$strSQL);
	  }
  }
mysqli_close($objCon);
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
$serverName = "localhost";
$userName = "root";
$userPassword = "root";
$dbName = "mydatabase";
$objCon = mysqli_connect($serverName,$userName,$userPassword,$dbName);
if (!$objCon) {
	echo $objCon->connect_error;
	exit();
}
$strSQL = "SELECT * FROM orders WHERE OrderID = '".$_GET["OrderID"]."' ";
$objQuery = mysqli_query($objCon,$strSQL);
$objResult = $objResult = mysqli_fetch_array($objQuery,MYSQLI_ASSOC);
?>
 <table width="304" border="1">
    <tr>
      <td width="71">OrderID</td>
      <td width="217">
	  <?=$objResult["OrderID"];?></td>
    </tr>
    <tr>
      <td width="71">Name</td>
      <td width="217">
	  <?=$objResult["Name"];?></td>
    </tr>
    <tr>
      <td>Address</td>
      <td><?=$objResult["Address"];?></td>
    </tr>
    <tr>
      <td>Tel</td>
      <td><?=$objResult["Tel"];?></td>
    </tr>
    <tr>
      <td>Email</td>
      <td><?=$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 = mysqli_query($objCon,$strSQL2);
while($objResult2 = mysqli_fetch_array($objQuery2,MYSQLI_ASSOC))
{
		$strSQL3 = "SELECT * FROM product WHERE ProductID = '".$objResult2["ProductID"]."' ";
		$objQuery3 = mysqli_query($objCon,$strSQL3);
		$objResult3 = $objResult = mysqli_fetch_array($objQuery3,MYSQLI_ASSOC);
		$Total = $objResult2["Qty"] * $objResult3["Price"];
		$SumTotal = $SumTotal + $Total;
	  ?>
	  <tr>
		<td><?=$objResult2["ProductID"];?></td>
		<td><?=$objResult3["ProductName"];?></td>
		<td><?=$objResult3["Price"];?></td>
		<td><?=$objResult2["Qty"];?></td>
		<td><?=number_format($Total,2);?></td>
	  </tr>
	  <?php
 }
  ?>
</table>
Sum Total <?php echo number_format($SumTotal,2);?>
<?php
mysqli_close($objCon);
?>
</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
 
 
  
 
  
 
 Download Code ทั้งหมด
 
 
 
                           
                             |  |  |  |  
                             |  |  |  |  
 
            
              | 
                  
                    |  |  
                    |  | By : | TC Admin |  
                    |  | Article : | บทความเป็นการเขียนโดยสมาชิก หากมีปัญหาเรื่องลิขสิทธิ์ กรุณาแจ้งให้ทาง webmaster ทราบด้วยครับ |  
                    |  | Score Rating : |      |  
                    |  | Create Date : | 2015-11-10 |  
                    |  | Download : | No files |  |  |  |   |