ระบบ Shopping Cart ด้วย PHP Session Array


หน้าแรก PHP MySQL เกร็ดความรู้ ระบบ Shopping Cart ด้วย PHP Session Array
สิ่งสำคัญสำหรับระบบ shopping cart แบบ session array คือรหัสของสินค้า หรือ คีย์ใดที่ไม่ซ้ำกันและสามารถระบุถึงตัวสินค้านั้นๆ ได้ ส่วนรายละเอียดอื่นๆ ก็แล้วว่าใครจะกำหนดมันอย่างไร ส่วนระบบที่นำมาเขียนนี้ขอเป็นแค่แนวคิดเท่านั้นนะครับ อย่าก๊อปไปวางอย่างเดียว เพราะมันจะไม่เกิดผลใดๆ นอกจาก error ครับ ก่อนจะเริ่มอย่าลืม session_start(); กันให้เรียบร้อยนะครับ

สำหรับ page ที่ให้ user เลือกสินค้านั้น เวลาเลือกสินค้าแล้ว ผมจะให้ user ระบุจำนวนสินค้าที่ต้องการด้วย ดังนั้นสิ่งที่ผมจะเก็บไว้ใน session นั้นก็จะมีอยู่ดังนี้

รหัสสินค้า
ชื่อสินค้า
ราคา
จำนวน
ราคารวมหมดทั้งตะกร้า
จำนวนรวมหมดทั้งตะกร้า

มีด้วยกันหกอย่างครับ อาจจะเยอะไปหน่อยนะครับ แต่ผมว่ามันเอาไปใช้งานง่ายดี หุหุ ที่สำคัญใช้เสร็จแล้วอย่าลืมเคลียร์ให้หมดนะครับ ไม่งั้นเอ๋อแน่ๆ ต่อไปเป็นการเขียนเก็บลง session array โดยจะมีการตรวจสอบด้วยว่าสินค้าที่เลือกเข้ามานั้น ซ้ำกับสินค้าในตะกร้าหรือไม่ ถ้าซ้ำกันก็จะทำการเพิ่มจำนวนสินค้าลงไป และคำนวนราคาใหม่ครับ



  Code
$chk = 0; //สร้างตัวแปรสำหรับเช็คว่าสินค้าซ้ำหรือไม่
foreach($_SESSION['SS_PID'] as $k => $v){
if($v==$_POST['pid']){ //เช็ครหัสสินค้าว่ามีหรือไม่ ถ้ามีจะให้ $chk = 1 เพื่อบอกว่าสินค้าซ้ำ
$chk = 1;
}
}

if($chk==1){ //ถ้าสินค้าซ้ำ กับสินค้าในตะกร้า
$_SESSION['SS_AMOUNT'][$_POST['pid']]+=$_POST['amount']; //ทำการบวกจำนวนสินค้าที่สั่งเข้ามาใหม่เพิ่มเข้าไป
$_SESSION['SS_PRICE'][$_POST['pid']]+=($_POST['price']*$_POST['amount']); //คิดราคาสินค้าตัวนั้นๆ ใหม่

$_SESSION['SS_TOTAL'] += $_SESSION['SS_PRICE'][$_POST['pid']]; //อันนี้เก็บราคาสินค้าในตะกร้าทั้งหมด
$_SESSION['SS_ITEM'] += $_SESSION['SS_AMOUNT'][$_POST['pid']]; //อันนี้ผมเก็บจำนวนของสินค้าทั้งหมด เอาไว้แสดงในตะกร้าทุกๆ หน้าของเว็บ
}else{ //ถ้าสินค้าที่เลือกไม่มีอยู่ในตะกร้า
$_SESSION['SS_PID'][$_POST['pid']] = $_POST['pid']; //เก็บรหัสสินค้า
$_SESSION['SS_PNAME'][$_POST['pid']] = $_POST['proname']; //เก็บชื่อสินค้า
$_SESSION['SS_PRICE'][$_POST['pid']] = ($_POST['price']*$_POST['amount']); //เก็บราคา (ราคา*จำนวน)
$_SESSION['SS_AMOUNT'][$_POST['pid']] = $_POST['amount']; //เก็บจำนวนสินค้า

$_SESSION['SS_TOTAL'] += $_SESSION['SS_PRICE'][$_POST['pid']]; //อันนี้เก็บราคาสินค้าในตะกร้าทั้งหมด
$_SESSION['SS_ITEM'] += $_SESSION['SS_AMOUNT'][$_POST['pid']]; //อันนี้ผมเก็บจำนวนของสินค้าทั้งหมด เอาไว้แสดงในตะกร้าทุกๆ หน้าของเว็บ
}



วิธีการเก็บ session array แบบของผมนี้ก็คือ ผมจะใช้รหัสสินค้า(มันไม่ซ้ำกันแน่นอน)เป็น คีย์ ของอาเรย์ครับ ทำให้เวลาทำการค้นหา หรือ จะลบ จะแก้ไขก็ทำได้ง่ายครับ

ต่อไปเป็นวิธีการลบสินค้าในตะกร้าครับ แน่นอนว่าบางทีเลือกไปแล้วอยากเปลี่ยนเอาอันอื่นก็ลบออกซะ วิธีลบก็ง่ายๆครับ ใช้แค่ รหัสสินค้าเท่านั้นครับ จะได้โค้ดดังนี้ครับ



  Code
$pid = $_GET['pid']; //รับรหัสสินค้ามาครับ จะรับแบบ get post ก็เลือกกันเอานะครับ
unset($_SESSION['SS_PID'][$pid]); //unset คำสั่งสำหรับลบตัวแปรครับ ลบให้หมดทุกตัวที่มี รหัสสินค้าเหมือนกันครับ
unset($_SESSION['SS_PNAME'][$pid]);
unset($_SESSION['SS_PRICE'][$pid]);
unset($_SESSION['SS_AMOUNT'][$pid]);



หลังจากลบแล้ว อย่าลืมทำการคำนวนราคาใหม่ด้วยนะครับ เดี๋ยวราคาจะผิดนะครับ หุหุ



  Code
$_SESSION['SS_TOTAL']='';
$_SESSION['SS_ITEM']='';

foreach($_SESSION['SS_PID'] as $k=>$v){
$_SESSION['SS_TOTAL'] += $_SESSION['SS_PRICE'][$k];
$_SESSION['SS_ITEM'] += $_SESSION['SS_AMOUNT'][$k];
}



สำหรับการแก้ไขจำนวนสินค้าในตะกร้านั้น หากเข้าใจแนวคิดแล้วก็คงจะเขียนกันได้ไม่ยากนะครับ สำหรับระบบ Shopping Cart ของผมก็มีเพียงเท่านี้นะครับ ใครเจอบัค หรือ ข้อผิดพลาดตรงไหน รบกวนช่วยชี้แจงเพื่อแก้ไขด้วยครับ ขอบคุณครับ

- See more at: http://phplike.blogspot.com/2014/01/shopping-cart-session-array.html#sthash.RmA3ORKe.dpuf

ขึ้นไปด้านบน