GORAGOD.com

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

เทคนิคการเก็บข้อมูลสินค้าสำหรับเว็บร้านค้าหลักๆ ก็จะมี 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) โค้ด เพื่อให้สามารถมองภาพลำดับการทำงานออก รวมทั้ง สามารถหาข้อผิดพลาด ได้ง่ายขึ้นด้วย