เทคนิคการจัดการ สินค้า ในตระกร้าสินค้า

เทคนิคการเก็บข้อมูลสินค้าสำหรับเว็บร้านค้าหลักๆ ก็จะมี 2 วิธีครับ ซึ่งก็จะมีข้อดีข้อเสียต่างกัน

วิธีแรก เก็บข้อมูล ลง session

session สามารถใช้เป็นเครื่องมือในการพักข้อมูลชั่วคราวได้ ซึ่งมันค่อนข้างง่ายด้วยซ้ำไป เนื่องจากมันสามารถเก็บในรูปแอเรย์ได้ ทำให้สะดวกในการจัดการ ลองดูตัวอย่างการใช้ session ในการเก็บข้อมูลการเลือกสินค้านะครับ
<?php
  // เมื่อเลือกสินค้าใหม่
  // product_id หมายถึง id ของสินค้า อ้างอิงจากฐานข้อมูล
  // count จำนวนของสินค้าที่เลือก จากตระกร้า
  // price คือ ราคาสินค้าต่อหน่วย ที่ทำการขาย มีประโยชน์ในการคำนวณราคา โดยที่ไม่ต้อง query ซ้ำอีก 
  $_SESSION['store']['product_id'] = array(count, price);
?>

ข้อมูลด้านบน ก็เพียงพอ สำหรับตะกร้าสินค้าแล้วครับ

การดูว่าเลือกสินค้าใดไปบ้าง ก็อาจเขียน query ได้ประมาณนี้
<?php
 // ข้อมูลสินค้าที่เลือกไว้
 // เลือกสินค้า id = 1 จำนวน 3 ชิ้น ราคาชิ้นละ 5 บาท
 $_SESSION['store'][1] = array(3, 5); 
 $_SESSION['store'][5] = array(1, 10);
 $_SESSION['store'][7] = array(2, 15);
 // sql เพื่อ list รายการสินค้าที่เลือก
 $sql = "SELECT * FROM `product` WHERE `id` IN (".implode(', ', array_keys($_SESSION['store'])).")";
 // แสดงผล sql (debug)
 echo $sql;
?>

หากมีการลบ หรือเพิ่มสินค้าที่เลือก ก็สามารถทำได้ง่ายๆ ครับ
<?php
 // เลือกสินค้า id = 1 จำนวน 3 ชิ้น ราคาชิ้นละ 5 บาท
 $_SESSION['store'][1] = array(3, 5); 
 $_SESSION['store'][5] = array(1, 10);
 $_SESSION['store'][7] = array(2, 15);
 // เลือกสินค้า id = 1 เพิ่ม 1 ชื้น
 $_SESSION['store'][1][0]++; 
 // เลือกสินค้า id = 5 เพิ่ม 9 ชื้น
 $_SESSION['store'][5][0]  += 9;  
 // ลบสินค้า id = 7
 unset($_SESSION['store'][7]); 
 // debug
 print_r($_SESSION['store']);
?>

ส่วนในขั้นตอนจบกระบวนการขาย ซึ่งเราจะต้องบันทึกสินค้าที่เลือกลงฐานข้อมูล ก็อาจอาศัยการวนลูป บันทึกทีละข้อมูลก็ได้
<?php
 // เลือกสินค้า id = 1 จำนวน 3 ชิ้น ราคาชิ้นละ 5 บาท
 $_SESSION['store'][1] = array(3, 5); 
 $_SESSION['store'][5] = array(1, 10);
 $_SESSION['store'][7] = array(2, 15);
 foreach($_SESSION['store'] AS $product_id => $value){
  // บันทึกลงในตารางการขาย (sale)
  $sql = "INSERT INTO `sale` (`product_id`, `price`, `count`) VALUES ('$product_id', '$value[1]', '$value[0]')";
  // (debug)
  echo $sql.'<br />';
 }
?>

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

ตัวอย่างนี้ มีเทคนิคที่น่าเรียนรู้ อยู่ 2-3 อย่าง ครับ คือ เทคนิคการใช้งานตัวแปร array เพื่อจัดการกับข้อมูลที่ซับซ้อน รวมถึง เทคนิคการใช้ session ในการเก็บข้อมูล (แบบ array) เพื่อให้สามารถใช้งานได้ทุกหน้า โดยที่ไม่ต้องพึ่งพาฐานข้อมูล และที่สำคัญอีกอย่าง คือ เทคนิคการ ดีบัก (debug) โค้ด เพื่อให้สามารถมองภาพลำดับการทำงานออก รวมทั้ง สามารถหาข้อผิดพลาด ได้ง่ายขึ้นด้วย
ผู้เขียน goragod โพสต์เมื่อ 20 ม.ค. 2553 เปิดดู 10,459 ป้ายกำกับ cart
^