วันอังคารที่ 5 เมษายน พ.ศ. 2554

จัดการข้อมูลการสั่งซื้อของลูกค้า(Admin) ตอนที่ 2 ดูข้อมูลการสั่งซื้อของลูกค้า

ดูข้อมูลการสั่งซื้อของลูกค้า
       จากบทที่แล้วผมได้สอนเขียนCode PHP,html,MySQL ค้นหาข้อมูลการสั่งซื้อของลูกค้ากันแล้วคับ สำหรับบทความสอนทำระบบ E-Commerce ด้วย PHP และ ฐานข้อมูล MySQL ตอนนี้เราจะสอนท่านเขียนCode  PHP,html,MySQL แสดงรายละเอียดการสั่งซื้อของลูกค้าแต่ละคนคับ ดูผลลัพธ์จากที่นี่เลยคับ
 เราจะกลับไปที่ไฟล์ admin_showorder.php เพื่อแก้ไขและเพิ่มเติมCode PHP บางส่วนเข้าไปคับ
ให้เปิดไฟล์ admin_showorder.php ขึ้นมา แล้วแก้ไขCodeตามนี้เลยคับ

คำสั่งที่เราได้แก้ไขคือ คำสั่ง
โดยเราจะทำLink ไปยังไฟล์ admin_showvieworder.php โดยส่ง request parameter เข้าไปสองตัวคือ รหัสการสั่งซื้อ (orderid) และ ชื่อusername ของลูกค้า (u)
จากนั้นเปิดโปรแกรม Dreamweaver ขึ้นมาแล้วสร้างไฟล์ .php ขึ้นมาอีกหนึ่งไฟล์ ตั้งชื่อว่า admin_showvieworder.php จากนั้นให้พิมพ์ Code ดังนี้
<?php
require_once("config.php");
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-874" />
<link rel="stylesheet" type="text/css" href="jquery/css/ui-lightness/jquery-ui-1.7.2.custom.css">
<link rel="stylesheet" type="text/css" href="style.css"/>
<title>ข้อมูลการสั่งซื้อของลูกค้า</title>
<?php
if(isset($_POST['od_id'])&&isset($_POST['od_status'])){//บันทึกสถานะการชำระเงิน
$odid=$_POST['od_id'];//รหัสใบสั่งซื้อ ข้อมูลถูกจัดเก็บแบบอาเรย์
$odst=$_POST['od_status'];//สถานะการสั่งซื้อ ข้อมูลจะอยู่ในรูปอาเรย์เช่นกัน
 for($olo=0;$olo<count($odid);$olo++){
  //อัพเดทสถานะการชำระเงิน
 mysql_query("UPDATE tb_order SET od_status='".$odst[$olo]."' WHERE od_id=".$odid[$olo]);
 }
echo "<script>alert('อัพเดทสถานะการชำระเงินเรียบร้อยแล้ว');</script>"; 
}

$showorder=false;#ไม่ให้แสดง table รายการสั่งซื้อ (ขณะที่รันโปรแกรมตอนแรก)
if(isset($_GET['day'])&&isset($_GET['mount'])&&isset($_GET['year'])){
 $day=$_GET['day'];
 $mount=$_GET['mount'];
 $year=$_GET['year'];
 $mbname=$_GET['mbname'];
 $sql="SELECT * FROM tb_order,tb_member WHERE tb_member.mb_user<>'' and tb_member.mb_user=tb_order.mb_user ";
 if($day!='0'&&$mount!='0'&&$year!='0'){#เลือก วัน เดือน ปี
  $rssearch="- $day/$mount/$year -";
  $date_select="%$year-$mount-$day";
  $sql.=" AND tb_order.od_date LIKE '$date_select'"; 
 }
 if($day=='0'&&$mount!='0'&&$year!='0'){#เลือก เดือน ปี
  $rssearch="- 00/$mount/$year -";
  $date_select="$year-$mount%";
  $sql.=" AND tb_order.od_date LIKE '$date_select'"; 
 }
 if($day=='0'&&$mount!='0'&&$year=='0'){#เลือก เดือน
  $rssearch="- 00/$mount/0000 -";
  $date_select="%-$mount-%";
  $sql.=" AND tb_order.od_date LIKE '$date_select'"; 
 }
 if($day=='0'&&$mount=='0'&&$year!='0'){#เลือก ปี
  $rssearch="- 00/00/$year -";
  $date_select="$year%";
  $sql.=" AND tb_order.od_date LIKE '$date_select'"; 
 }
 if($mbname!='')
  $rssearch="$rssearch  + $mbname +";
  $sql.=" AND (tb_member.mb_name LIKE '%$mbname%' OR tb_member.mb_user LIKE '%$mbname%') ";
 
 $showorder=true;#แสดงtable รายการสั่งซื่อได้ 
 $rs_showorder=$conn->Execute($sql.' ORDER BY tb_order.od_date DESC');#คิวรี่ข้อมูล จะมีคำสั่งเหมือน mysql_query
 $order_status=array('ยังไม่ชำระเงิน'=>1,'ชำระเงินแล้ว-รอจัดส่ง'=>2,'จัดส่งสินค้าเรียบร้อยแล้ว'=>3);#สถานะการชำระเงิน
} 

/*##############END ###############*/
if(isset($_POST['od_id'])){//ตรวจสอบการกดปุ่มsave (submit form)โดยเราจะตรวจสอบจาก ค่าพารามิเตอร์ที่ส่งเข้ามาแบบPOSTคือ od_id นั่นเอง
  $odid_save=$_POST['od_id'];//สร้างตัวแปร$odid_saveมารับค่าพารามิเตอร์ที่ส่งเข้ามา od_id[]
  $odstatus_save=$_POST['od_status'];//สร้างตัวแปร$odstatus_saveมารับค่าพารามิเตอร์ที่ส่งเข้ามา od_status[]
 }
?>
</head>
<body>
<div id="container">
  <div id="header">
    <div id="headerText">Crochet Tukta Online(หลังร้าน)<img src="images/logo.png" width="35" height="57" /></div>
  </div>
  <div id="content">
    <div id="m_left">
      <? require_once("leftmenu.php");?>
    </div>
    <div id="m_center"><strong>ดูรายการสั่งซื้อของลูกค้า</strong><br />
      <div id="dialogMsg" title="เกิดข้อผิดพลาด">
        <div id="showMsg"></div>
      </div>
      <form action="<?= htmlentities($_SERVER['PHP_SELF'], ENT_QUOTES) ?>" method="get" enctype="multipart/form-data" name="FaddPg" id="FaddPg" onsubmit="return chkVal()">
        <strong>วันที่</strong>
        <select name="day" id="day">
          <option value="0">ไม่เลือก</option>
          <?php for($dayi=1;$dayi<=31;$dayi++){ ?>
          <option value="<?=$dayi?>" >
          <?=$dayi?>
          </option>
          <? } ?>
        </select>
        <strong>เดือน</strong>
        <select name="mount" id="mount">
          <option value="0">ไม่เลือก</option>
          <?php 
   $mount=array('ม.ค.'=>'01', 'ก.พ.'=>'02', 'มี.ค.'=>'03','เม.ย.'=>'04','พ.ค.'=>'05','มิ.ย.'=>'06','ก.ค.'=>'07','ส.ค.'=>'08','ก.ย.'=>09,'ต.ค.'=>'10','พ.ย.'=>'11','ธ.ค.'=>'12');
   foreach($mount as $keymount => $valmount){#$keymount คือ ชื่อเดือน(ม.ค.) ส่วน $valmount คือ ลำดับเดือน(1)
    ?>
          <option value="<?=$valmount?>">
          <?=$keymount?>
          </option>
          <? } ?>
        </select>
        <strong>ปี</strong>
        <select name="year" id="year">
          <option value="0">ไม่เลือก</option>
          <?php for($yeari=2005;$yeari<=date('Y');$yeari++){#เริ่มจากปี 2005 ถึงปีปัจจุบัน(date('Y')) ?>
          <option value="<?=$yeari?>">
          <?=$yeari+543#แปลงให้เป็นปี พ.ศ.?>
          </option>
          <? } ?>
        </select>
        หรือ <strong>ชื่อ/Username</strong>
        <input type="text" name="mbname" id="mbname" />
        <input type="submit" name="bt_search" id="bt_search" value="ค้นหา" />
      </form>
      <?php if($showorder){ ?>
      <form id="pay_status" name="pay_status" method="post" action="admin_showorder.php?<?=$_SERVER['QUERY_STRING']?>">
        <table width="100%" border="1" cellpadding="3" cellspacing="0">
          <tr bgcolor="#996633">
            <td colspan="4" bgcolor="#FF9966">ผลการค้นหา : <strong>
              <?=$rssearch?>
              </strong></td>
          </tr>
          <tr bgcolor="#996633">
            <td><strong>วันที่</strong></td>
            <td><strong>ชื่อ-สกุล</strong></td>
            <td><strong>User name</strong></td>
            <td><strong>สถานะ <a href="#"  onclick="document.getElementById('pay_status').submit()"><img src="images/save.gif" width="16" height="16" border="0" />
              
            </a></strong></td>
          </tr>
          <?php
    if($rs_showorder->RecordCount()>0){
    while(!$rs_showorder->EOF){
     $odid=$rs_showorder->fields['od_id'];
     $u=$rs_showorder->fields['mb_user'];   
    ?>
          <tr bgcolor="#FFFFFF">
            <td><?="<a href=\"admin_showvieworder.php?orderid=$odid&u=$u\" target=\"_blank\">".$rs_showorder->fields['od_date']."</a>"?></td>
            <td><?=$rs_showorder->fields['mb_name']?></td>
            <td><?=$rs_showorder->fields['mb_user']?></td>
            <td><input type="hidden" name="od_id[]" id="od_id[]" value="<?=$odid?>" /><select name="od_status[]" id="select2">
                <?php foreach($order_status as $oskey => $osval){#แสดงสถานะการชำระเงิน?>
                <option value="<?=$osval?>" 
    <?=$osval==$rs_showorder->fields['od_status']?'selected="selected"':""?>>
                <?=$oskey?>
                </option>
                <? }  ?>
              </select></td>
          </tr>
          <? 
    $rs_showorder->MoveNext();}
    }else{
   ?>
          <tr bgcolor="#FFFFFF">
            <td colspan="4" align="center"><label for="select2"><strong>ไม่พบข้อมูลที่ค้นหา</strong></label></td>
          </tr>
          <? } ?>
        </table>
      </form>
      <? } ?>
    </div>
  </div>
  <div class="clear"></div>
  <div id="footer">
    <h1>copyright©2010 http://pnwtt1987.blogspot.com</h1>
  </div>
</div>
</body>
</html>
<?php $conn->Close();?>


แล้วพบกับบทความสอนทำ E-Commerce ด้วย PHP+MySQL ในโอกาสหน้าคับ

22 ความคิดเห็น :

  1. อยากได้ไฟล์ต้องแต่ต้นเลยอะครับ รบกวนหน่อยนะครับ

    ตอบลบ
  2. จัดให้เลยคับ ไฟล์ที่ใช้สอนตั้งแต่บทความแรกจนถึงบทความนี้พร้อมกับฐานข้อมูลคับ
    ดาวน์โหลด >>http://www.4shared.com/file/ASJptEkC/exshops.html

    ตอบลบ
  3. เพิ่มเติมให้นะครับ
    $sql="SELECT * FROM tb_order,tb_member WHERE tb_member.mb_user<>'' and tb_member.mb_user=tb_order.mb_user ";
    ไม่งั้น order ออกมาซ้ำกันนะครับ

    ตอบลบ
    คำตอบ
    1. เพิ่มเติมตรง ไฟล์ไหนค่ะ

      ลบ
  4. ขอบคุณมากครับ ได้ประโยชน์มากเลยสำหรับคนที่เพิ่งเริ่ม ลองไล่โปรแกรมดูสนุกดีครับ :)

    ตอบลบ
  5. ขอบคุณมากๆๆคะ กำลังศึกษาเรื่องอีคอมพอดีเลยย

    ตอบลบ
  6. ถ้าต้องการให้ table รายการสั่งซื้อ แสดงผลเลย
    แก้ไขโค้ดยังไงค่ะ
    แล้ว ตัวเลขวันที่อ่ะค่ะ วันที่ 1-9 search หาไม่เจอนะคะ เพราะ มันต้องเป็นเลขสองหลักถึงจะ search ได้ ค่ะ

    ตอบลบ
  7. @pang
    ถ้าให้แสดงผลเลยคงยากหน่อยครับ เพราะต้องแก้ไขโค๊ดเยอะนิดหน่อยครับ
    ส่วนเลข 1-9 วิธีแก้ก็คือ ไฟล์ admin_showorder.php สังเกตุคำสั่ง

    <?php for($dayi=1;$dayi<=31;$dayi++){ ?>
    <option value="<?=$dayi?>" >
    <?=$dayi?>
    </option>
    <? } ?>

    เปลี่ยนเป็น

    <?php for($dayi=1;$dayi<=31;$dayi++){ ?>
    <option value="<?=$dayi<10?'0'.$dayi:$dayi?>" >
    <?=$dayi?>

    ตอบลบ
  8. ใช่ค่ะ พยายามแก้อยู่นาน ยังไงก็ไม่ได้ ไม่เป็นไรค่ะ ไม่เป็นปัญหา ขอบคุณสำหรับโค้ดวันที่นะคะ

    ตอบลบ
  9. พี่ครับถ้าเราจะอัพเดท สถานะลูกค้าว่าชำระเงินแล้ว ต้องทำยังไง ต้องเขียน Code ยังไงครับ

    ขอบคุณครับ

    แบบว่าแจ้งเตือนลูกค้าอะครับว่ายังไม่ ชำระเงิน,ชำระแล้ว

    ตอบลบ
    คำตอบ
    1. โทดทีครับผมลืมสอนอ่ะ แต่เขียนโค๊ดเอาไว้แล้ว ลองเอาโค๊ดข้างล่างไปประยุกต์ดูนะครับ

      if(isset($_POST['od_id'])&&isset($_POST['od_status'])){//บันทึกสถานะการชำระเงิน
      $odid=$_POST['od_id'];//รหัสใบสั่งซื้อ ข้อมูลถูกจัดเก็บแบบอาเรย์
      $odst=$_POST['od_status'];//สถานะการสั่งซื้อ ข้อมูลจะอยู่ในรูปอาเรย์เช่นกัน
      for($olo=0;$olo<count($odid);$olo++){
      //อัพเดทสถานะการชำระเงิน
      $ChkOrder=$conn->Execute('SELECT od_status FROM tb_order WHERE od_id='.$odid[$olo]);
      if($ChkOrder->fields[0]<3){
      $conn->Execute("UPDATE tb_order SET od_status='".$odst[$olo]."' WHERE od_id=".$odid[$olo]);
      $UpdateProduct=$conn->Execute("SELECT * FROM tb_orderview WHERE od_id=".$odid[$olo]);
      if($odst[$olo]>=3){
      while(!$UpdateProduct->EOF){
      $conn->Execute('UPDATE tb_product SET pd_amount=pd_amount-'. $UpdateProduct->fields['odv_amount'].' WHERE pd_id='.$UpdateProduct->fields['pd_id']) ;//ตัดสต๊อค
      $UpdateProduct->MoveNext();
      }
      }
      }
      $ChkOrder->Close();
      }
      echo "<script>alert('อัพเดทสถานะการชำระเงินเรียบร้อยแล้ว');</script>";
      }

      ลบ
    2. ไม่ทราบว่า เราต้องเอาไปใส่ในส่วนไหนอะครับผม งงมาก

      ลบ
    3. ไฟล์จากบทความนี้นะครับ ->http://php-for-ecommerce.blogspot.com/2011/03/admin-1.html

      ใส่ก่อนคำสั่ง $showorder=false;

      และให้สร้าง hidden field ชื่อ od_id มารับค่า รหัสสั่งซื่้อด้วยนะครับ

      เช่นในลูป while(!$rs_showorder->EOF){}

      ให้สร้างดังนี้ <input type="hidden" name="od_id[]" value="<?=$rs_showorder->fields['od_id']?>">

      ลบ
    4. พี่คับผมอยากได้ไฟล์ส่วนนี้ที่สมบูรณ์อะคับผมทำต่อไม่ถูกช่วยหน่อยนะคับ

      ลบ
    5. อยู่ตรงนี้ครับ -->http://php-for-ecommerce.blogspot.com/2011/03/admin-1.html

      ผมเขียนเพิ่มให้แล้ว

      ไฟล์ชื่อ admin_showorder.php นะครับ สังเกตุดูให้ดี

      ลบ
  10. ไม่ระบุชื่อ3 มีนาคม 2556 22:14

    ขอถามหน่อยคะ พอดีจะเปลี่ยนรูปบบ css อย่างเช่นพื้นหลังคะ แต่ลองเปลี่ยนเเล้ว พอรัน f12 มันไม่ยอมเปลี่ยน แต่หน้า design เปลี่ยนเเล้ว ไม่ทราบว่าเป็นเพราะอะไรเหรอคะ

    ตอบลบ
    คำตอบ
    1. ลองกดรีเฟซ 1 รอบ หรือเคลียร์แคชในเบราเซอร์ดูครับ

      ลบ
  11. พี่ครับมัน error บรรทัด $ChkOrder->Close(); อะครับ
    เครียดมากเลยอัพสเตตัสไม่ได้

    ตอบลบ
  12. ทำได้แล้ว ^^ พี่ครับถ้าผมอยากให้สินค้าขายดี มันเปลี่ยนสถานะของสินค้าโดยที่เราไม่ใช่คนปรับเอง ทำไงดีครับ

    ตอบลบ
  13. พี่ครับผมต้องทำรายงานตามช่วงเวลาอะครับ และมันไม่ออก เศร้า T^T

    ตอบลบ