|
|
|
พี่ๆครับ ช่วยแก้ code ให้ผมด้วย เกี่ยวกับ ระบบ shopping cart แบบ Ajax ครับ ^_^ |
|
|
|
|
|
|
|
คือผมทำเว็บขายของออนไลน์ โดยใช้ โค้ดจากเว็บนี้น่ะครับ
http://php-for-ecommerce.blogspot.com/2011/12/add-to-cart-ajax-jquery.html#comment-form
ทุกอย่าง ok หมดเลยครับ แต่ติดปัญหาอยู่นิดเดียว คือ พอแก้จำนวนสินค้าในหน้าตะกร้า ราคารวมของแต่ละชนิด มันไม่อัพเดททันทีครับ ต้องปิดหน้านี้ก่อนแล้วเปิดใหม่ ราคารวมของแต่ละชนิดถึงจะอัพเดท ผิดกับ จำนวนรวม กับ ราคารวม ซึงพอมีการแกไขจำนวน ตัวเลขก็จะเปลี่ยนทันที อันนี้จะแก้ใค้ดยังไงครับ ให้ราคารวมสินค้าแต่ละชนิดมันอัพเดททันที
จากรูปนี้นะครับ
โค้ดครับ
mycart.php
Code (PHP)
<?php
session_start();
include "function.php";
include "dbconfig.php";
include "config.php";
conndb();
?>
<script type="text/javascript">
function deleteProduct(ele){
var CartEle=$(ele).parent().parent().attr('id');
var CartId=$(ele).parent().parent().attr('id').split("-");
$.ajax({
url:"chkcart.php?cartdel="+CartId[1],
dataType: 'json',
success: function(data) {
$('.cart_num').html(data.num);
$('.cart_quantity').html(data.quantity);
$('.cart_price').html(data.price);
$('.productTable tr#'+CartEle+'').remove();
}
});
}
function updateProduct(ele){
var Pd=$(ele).parent().parent().attr('id').split("-");
var quantity=$(ele).val();
$.ajax({
url:"chkcart.php",
type: 'POST',
data: {product_id:Pd[0],updatecart:Pd[1], quantity:quantity},
dataType: 'json',
success: function(data) {
$('.cart_num').html(data.num);
$('.cart_quantity').html(data.quantity);
$('.cart_price').html(data.price);
}
});
}
</script>
<script Language="Javascript">
<!--
function Conf(object)
{
if (confirm("กรุณายืนยันการสั่งซื้อ ?") == true) {
parent.location='confirm_order.php';
return false;
}
return false;
}
//-->
</script>
<link href="css/style_demo.css" rel="stylesheet" type="text/css">
<table width="750" border="0" align="left" cellpadding="2" cellspacing="2">
<tr>
<td align="center" bgcolor="#FFFFFF"><img src="images/shopping_cart_header.png" width="750" height="102" />
<table width="750" class="productTable" border="0" cellpadding="5" cellspacing="0" style="border-bottom:#DADADA solid 2px;background:#9C0;">
<tr bgcolor="#FFFF99">
<td width="8%" align="center" bgcolor="#34ccff"><span class="text_14_black_bold">ลำดับ</span></td>
<td width="54%" align="center" bgcolor="#34ccff"><span class="text_14_black_bold"><b>ชื่อสินค้า</b></span></td>
<td width="13%" align="center" bgcolor="#34ccff"><span class="text_14_black_bold"><b>ราคาต่อหน่วย</b></span></td>
<td width="8%" align="center" bgcolor="#34ccff"><span class="text_14_black_bold"><b>จำนวน</b></span></td>
<td width="10%" align="center" bgcolor="#34ccff"><span class="text_14_black_bold"><b>ราคารวม</b></span></td>
<td width="7%" align="center" bgcolor="#34ccff"><span class="text_14_black_bold"><strong>ลบ</strong></span></td>
</tr>
<?
if(count($_SESSION["cartNumber"])>0){#จำนวนข้อมูลที่มีอยู่หากมากกว่า0
foreach($_SESSION["cartNumber"] as $RowCount){#วนลูปดึงข้อมูลสินค้าออกมาให้ครบตามจำนวนข้อมูลที่มีอยู่
$rs_showpd=mysql_fetch_array(mysql_query("SELECT* FROM product_tb WHERE id=".$_SESSION[$RowCount][0].""));
/*if($rs_showpd["unit_have"]<1){#ตรวจสอบจำนวนสินค้า หากจำนวนสินค้าเท่ากับ0
echo "<script>";
echo "alert('ขออภัยสินค้า \"".$rs_showpd["product_name"]."\" หมดแล้ว');window.location='chkcart.php?del=".$RowCount."';";
echo "</script>";
exit();
}else if($_SESSION[$RowCount][1]>$rs_showpd["unit_have"]){#จำนวนสินค้ามากกว่าจำนวนสินค้าในร้าน
echo "<script>";
echo "alert('จำนวนสินค้าของ \"".$rs_showpd["product_name"]."\" มีมากกว่าจำนวนสินค้าในร้าน');";
echo "</script>";
$_SESSION[$RowCount][1]=$rs_showpd["unit_have"];#เซตจำนวนสินค้าใหม่ให้มีค่่าเท่ากับจำนวนสินค้าในร้าน
}*/
?>
<tr id="<?=$rs_showpd["id"]?>-<?=$RowCount?>">
<td bgcolor="#FFFFFF"><?=$rs_showpd["id"]#รหัสสินค้า?></td>
<td height="23" bgcolor="#FFFFFF">
<?=$rs_showpd["product_name"]#ชื่อสินค้า?></td>
<td align="center" bgcolor="#FFFFFF"><?=$rs_showpd["priceperunit"]#ชื่อสินค้า?></td>
<td align="center" bgcolor="#FFFFFF"><input style="text-align:center;" name="unit_have" type="text" id="unit_have" size="5" value="<?=$_SESSION[$RowCount][1]#จำนวนสินค้า?>" onkeyup="updateProduct(this);"/></td>
<td align="center" bgcolor="#FFFFFF"><?=$TotalPriceAmount=$_SESSION[$RowCount][2]*$_SESSION[$RowCount][1]#ราคาสินค้า?></td>
<td align="center" bgcolor="#FFFFFF"><a href="#" onclick="deleteProduct(this); return false;"><img src="images/delete.png" width="20" height="20" border="0"/></a></td>
</tr>
<?
$TotalAmount+=$_SESSION[$RowCount][1];#คำนวณหาจำนวนสินค้าทั้งหมด
$TotalPrice+=$TotalPriceAmount;#คำนวณหาราคาสินค้าทั้งหมด
}
?>
<tr style="border-bottom:#DADADA 1px solid;">
<td align="center" bgcolor="#34ccff" style="border-bottom:#DADADA solid 1px;"> </td>
<td height="23" align="right" bgcolor="#34ccff" style="border-bottom:#DADADA solid 1px;"><b><span class="text_14_black_bold">ราคารวม</span></b></td>
<td align="center" bgcolor="#34ccff" style="border-bottom:#DADADA solid 1px;"> </td>
<td align="center" bgcolor="#34ccff" style="border-bottom:#DADADA solid 1px;"><strong> <span class="cart_quantity">
<?= $TotalAmount?>
</span> </strong></td>
<td align="center" bgcolor="#34ccff" style="border-bottom:#DADADA solid 1px;"><strong> <span class="cart_price">
<?= $TotalPrice?>
</span> </strong></td>
<td align="center" bgcolor="#34ccff" style="border-bottom:#DADADA solid 1px;"> </td>
</tr>
<?
if($use_vat == 1)
{
?>
<tr style="border-bottom:#DADADA 1px solid;">
<td align="center" bgcolor="#34ccff" style="border-bottom:#DADADA solid 1px;"> </td>
<td height="23" align="right" bgcolor="#34ccff" style="border-bottom:#DADADA solid 1px;"><b> <span class="text_14_black_bold">ภาษีมูลค่าเพิ่ม (7%)</span></b></td>
<td align="center" bgcolor="#34ccff" style="border-bottom:#DADADA solid 1px;"> </td>
<td align="center" bgcolor="#34ccff" style="border-bottom:#DADADA solid 1px;"> </td>
<td align="center" bgcolor="#34ccff" style="border-bottom:#DADADA solid 1px;"><strong><span class="cart_price">
<?= $TotalPrice*0.07?>
</span></strong></td>
<td align="center" bgcolor="#34ccff" style="border-bottom:#DADADA solid 1px;"> </td>
</tr>
<tr style="border-bottom:#DADADA 1px solid;">
<td align="center" bgcolor="#34ccff" style="border-bottom:#DADADA solid 1px;"> </td>
<td height="23" align="right" bgcolor="#34ccff" style="border-bottom:#DADADA solid 1px;"><b class="text_14_black_bold"> ราคารวมภาษีมูลค่าเพิ่ม (7%)</b></td>
<td align="center" bgcolor="#34ccff" style="border-bottom:#DADADA solid 1px;"> </td>
<td align="center" bgcolor="#34ccff" style="border-bottom:#DADADA solid 1px;"> </td>
<td align="center" bgcolor="#34ccff" style="border-bottom:#DADADA solid 1px;"><strong><span class="cart_price">
<?= $TotalPrice+$TotalPrice*0.07?>
</span></strong></td>
<td align="center" bgcolor="#34ccff" style="border-bottom:#DADADA solid 1px;"> </td>
</tr>
<?
}
?>
<? } else { ?>
<tr>
<td height="23" colspan="6" align="center" bgcolor="#34ccff"><strong>ไม่พบสินค้าในตระกร้า</strong></td>
</tr>
<? } ?>
</table>
<br>
<INPUT TYPE="button" class="btn" onClick="return Conf(this);" VALUE="ยืนยันการสั่งซื้อ"></td>
</tr>
</table>
chkcart.php
Code (PHP)
<?php
session_start();
include "function.php";
include "dbconfig.php";
include "config.php";
conndb();
function getjson_cart(){
if(count($_SESSION["cartNumber"])>0){
$TotalAmount=0;$TotalPrice=0;
foreach($_SESSION["cartNumber"] as $RowCount){
$TotalAmount+=$_SESSION[$RowCount][1];#คำนวณหาจำนวนสินค้าทั้งหมด
$TotalPrice+=($_SESSION[$RowCount][2]*$_SESSION[$RowCount][1]);#คำนวณหาราคาสินค้าทั้งหมด
}
echo '{"num":"'.count($_SESSION["cartNumber"]).'","quantity":"'.$TotalAmount.'","price":"'.$TotalPrice.'"}';
}else{
echo '{"num":"0","quantity":"0","price":"0"}';
}
}
if(isset($_GET["cartid"])){#Add to cart
$cid=$_GET["cartid"];
$_SESSION["cartcount"]++;
$cartcount=$_SESSION["cartcount"];
$CItemCount="cart$cartcount";
$CartStatus="";#เอาไว้เก็บสถานะสินค้าว่าลูกค้าเลือกซ้ำหรือไม่
$rs_showpd=mysql_query("SELECT * FROM product_tb WHERE id=".$cid."");
$showpd=mysql_fetch_array($rs_showpd);
if(count($_SESSION["cartNumber"])!=0 ){
foreach($_SESSION["cartNumber"] as $RecCart){
if($_SESSION[$RecCart][0]==$cid){#หากสินค้าซ้ำกับของเดิม(โดยตรวจสอบจาก ID ของสินค้า)
$_SESSION[$RecCart][1]++;#เพิ่มจำนวนสินค้า
$CartStatus="double";#เปลี่ยนสถานะ
}
}
}
if($CartStatus==""){#สถานะเป็นค่าว่าง แสดงว่าสินค้าไม่ซ้ำกับของเดิม
$_SESSION[$CItemCount][0]=$cid;//รหัสสินค้า
$_SESSION[$CItemCount][1]=1;//จำนวนเริ่มต้น
$_SESSION[$CItemCount][2]=$showpd['priceperunit'];//ราคา
$_SESSION[$CItemCount][3]='';//ความต้องการเพิ่มเติม เซตให้เป็นค่าว่างก่อน เพราะเป็นค่าเริ่มต้น
$_SESSION["cartNumber"][$cartcount]=$CItemCount;#ตำแหน่งของแต่ละเรคคอร์ดของสินค้า
}
getjson_cart();
mysql_free_result($rs_showpd);
mysql_close($conn);
}
if(isset($_GET["cartdel"])){
$RecDel=$_GET["cartdel"];
foreach($_SESSION["cartNumber"] as $RecCart){#วนไปจนกว่าจะเจอแถวของสินค้าที่เลือกลบ
if($RecCart==$RecDel){
$CNum =preg_replace("/[^0-9]/", '', $RecCart); // คัดเอาเฉพาะตัวเลข เช่น cart1 จะได้ ค่า 1 เป็นต้น
unset($_SESSION['cartNumber'][$CNum]); // unset แถวที่เก็บสินค้าที่ต้องการลบ
}
unset($_SESSION[$RecDel]);#unset ข้อมูลสินค้าที่เก็บไว้ทั้งหมด
}
getjson_cart();
}
if(isset($_POST["updatecart"])){#ต้องการแก้ไขจำนวนสินค้า
$pdid=$_POST["product_id"];#รหัสของสินค้าทั้งหมด(จัดเก็บไว้ในรูป Array)
$cartRows =$_POST["updatecart"];#จำนวน Record ของแถวทั้งหมดของสินค้า(จัดเก็บไว้ในรูป Array)
$pamount=$_POST["quantity"];#จำนวน Record ของสินค้า(จัดเก็บไว้ในรูป Array)
/*
if($pamount>0){#เอาเฉพาะจำนวนสินค้าที่มากกว่า0
$rs_record=mysql_fetch_array(mysql_query("SELECT unit_have,unit_have FROM product_tb WHERE id=".$pdid.""));
if($pamount>$rs_record[1]){#หากจำนวนที่ลูกค้าระบุมากกว่าจำนวนที่มีอยู่ในร้าน
$_SESSION[$cartRows][1] = $rs_record[1];#เซตจำนวนสินค้าใหม่ให้มีค่าเืท่ากับจำนวนสินค้าในร้าน
}else{#หากจำนวนสินค้าที่ลูกค้าระบุน้อยกว่าหรือเืท่ากับจำนวนสินค้าที่มีอยู่ในร้าน
$_SESSION[$cartRows][1] = $pamount ; #เซตจำนวนสินค้าใหม่ให้มีค่าเท่ากับจำนวนที่ลูกค้าระบุ
}
}
*/
if($pamount>0){#เอาเฉพาะจำนวนสินค้าที่มากกว่า0
$_SESSION[$cartRows][1] = $pamount ; #เซตจำนวนสินค้าใหม่ให้มีค่าเท่ากับจำนวนที่ลูกค้าระบุ
}
getjson_cart();
}
?>
รบกวนด้วยนะครับ พอดีผมเป็น web design ที่พอแก้ไข php ได้หน่อยๆเท่านั้นเอง ยิ่ง Ajax ยิ่งมึนเลยครับ T_T
Tag : PHP, MySQL, HTML/CSS, Action Script, Ajax, jQuery
|
|
|
|
|
|
Date :
2014-02-08 14:18:08 |
By :
gamboy_123 |
View :
1067 |
Reply :
5 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ลองแก้ตามคุณ Unidentifier แล้วครับผลปรากฏว่า
พอเปลี่ยนจำนวนปุ๊บ ราคารวมสินค้าแต่ละชิ้นก็เปลี่ยนครับ แต่เลขมันไม่ตรงอ่าครับ แถมเลขเป็นเหมือนกัน 2 แถวเลย รบกวนอีกนิดนะครับ^_^'
|
|
|
|
|
Date :
2014-02-08 18:59:31 |
By :
gamboy_123 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ดีใจจนอยากจะร้องไห้ ได้แล้วครับพี่ ขอบคุณ Unidentifier มากครับ ที่สละเวลามาแก้โค้ดให้ผม เป็นไปตามที่ผมต้องการเลยครับ ขอบคุณอีกครั้งครับ ^_^
|
|
|
|
|
Date :
2014-02-09 01:24:40 |
By :
gamboy_123 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 05
|