程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 購物車產生代碼

購物車產生代碼

編輯:關於PHP編程

購物車產生代碼

/*
應一網友的要求,將其發的一段購物車類代碼進行簡單的分析,希望對需要的新手們有所幫助~
本人也是新手,分析講解的同時也相當於學習了,不對的地方大蝦們趕緊指正哈,呵呵^^
代碼講解分析: Linvo. 2008-2-15
*/

//購物車session的產生代碼
if(!$session && !$scid) {
/*
session用來區別每一個購物車,相當於每個車的身份證號;
scid只用來標識一個購物車id號,可以看做是每個車的名字;
當該購物車的id和session值兩者都不存在時,就產生一個新購物車
*/
    $session = md5(uniqid(rand()));
    /*
    產生一個唯一的購物車session號
    rand()先產生個隨機數,uniqid()再在該隨機數的基礎上產生一個獨一無二的字符串,最後對該字符串進行md5
    */
    SetCookie(scid, $session, time() + 14400);
    /*
    設置該購物車cookie
    變量名:scid(不知到這裡是不是少了一個$號呢?)
    變量值:$session
    有效時間:當前時間+14400秒(4小時內)
    關於setcookie函數的詳細用法,大家還是參看php手冊吧~
    */
}


class Cart { //開始購物車類
    function check_item($table, $session, $product) {
    /*
    查驗物品(表名,session,物品)
    */

        $query = SELECT * FROM $table WHERE session='$session' AND product='$product' ;
        /*
        看一看'表'裡該'購物車'中有沒有該'產品'
        即,該產品有沒有已經放入購物車
        */

        $result = mysql_query($query);
        if(!$result) {
            return 0;
        }
        /*
        查詢失敗
        */

        $numRows = mysql_num_rows($result);
        if($numRows == 0) {
            return 0;
        /*
        若沒有找到,則返回0
        */
        } else {
            $row = mysql_fetch_object($result);
            return $row->quantity;
            /*
            若找到,則返回該物品數量
            這裡有必要解釋一下mysql_fetch_object函數(下面還會用到):
            【mysql_fetch_object() 和 mysql_fetch_array() 類似,只有一點區別 - 返回一個對象而不是數組。】
            上面這句話摘自php手冊,說得應該很明白了吧~
            簡單的說就是,取一條記錄中的某個字段,應該用“->”而不是像數組一樣用下標
            */
        }
    }

    function add_item($table, $session, $product, $quantity) {
    /*
    添加新物品(表名,session,物品,數量)
    */
        $qty = $this->check_item($table, $session, $product);
        /*
        調用上面那個函數,先檢查該類物品有沒有已經放入車中
        */

        if($qty == 0) {
            $query = INSERT INTO $table (session, product, quantity) VALUES ;
            $query .= ('$session', '$product', '$quantity') ;
            mysql_query($query);
            /*若車中沒有,則像車中添加該物品*/
        } else {
            $quantity += $qty; //若有,則在原有基礎上增加數量
            $query = UPDATE $table SET quantity='$quantity' WHERE session='$session' AND ;
            $query .= product='$product' ;
            mysql_query($query);
            /*
            並修改數據庫
            */
        }
    }

    function delete_item($table, $session, $product) {
    /*
    刪除物品(表名,session,物品)
    */
        $query = DELETE FROM $table WHERE session='$session' AND product='$product' ;
        mysql_query($query);
        /*
        刪除該購物車中該類物品
        */
    }

    function modify_quantity($table, $session, $product, $quantity) {
    /*
    修改物品數量(表名,session,物品,數量)
    */
        $query = UPDATE $table SET quantity='$quantity' WHERE session='$session' ;
        $query .= AND product='$product' ;
        mysql_query($query);
        /*
        將該物品數量修改為參數中的值
        */
    }

    function clear_cart($table, $session) {
    /*
    清空購物車(沒什麼好說)
    */
        $query = DELETE FROM $table WHERE session='$session' ;
        mysql_query($query);
    }

    function cart_total($table, $session) {
    /*
    車中物品總價
    */
        $query = SELECT * FROM $table WHERE session='$session' ;
        $result = mysql_query($query);
        /*
        先把車中所有物品取出
        */

        if(mysql_num_rows($result) > 0) {
            while($row = mysql_fetch_object($result)) {
            /*
            如果物品數量>0個,則逐個判斷價格並計算
            */
           
                $query = SELECT price FROM inventory WHERE product='$row->product' ;
                $invResult = mysql_query($query);
                /*
                從inventory(庫存)表中查找該物品的價格
                */

                $row_price = mysql_fetch_object($invResult);
                $total += ($row_price->price * $row->quantity);
                /*
                總價 += 該物品價格 * 該物品數量
                ( 大家應該能看明白吧:) )
                */
            }

        }
        return $total; //返回總價錢
    }


    function display_contents($table, $session) {
    /*
    獲取關於車中所有物品的詳細信息
    */
        $count = 0;
        /*
        物品數量計數
        注意,該變量不僅僅為了對物品數量進行統計,更重要的是,它將作為返回值數組中的下標,用來區別每一個物品!
        */

        $query = SELECT * FROM $table WHERE session='$session' ORDER BY id ;
        $result = mysql_query($query);
        /*
        先取出車中所有物品
        */

        while($row = mysql_fetch_object($result)) {
        /*
        分別對每一個物品進行取詳細信息
        */

            $query = SELECT * FROM inventory WHERE product='$row->product' ;
            $result_inv = mysql_query($query);
            /*
            從inventory(庫存)表中查找該物品的相關信息
            */

            $row_inventory = mysql_fetch_object($result_inv);
            $contents[product][$count] = $row_inventory->product;
            $contents[price][$count] = $row_inventory->price;
            $contents[quantity][$count] = $row->quantity;
            $contents[total][$count] = ($row_inventory->price * $row->quantity);
            $contents[description][$count] = $row_inventory->description;
            /*
            把所有關於該物品的詳細信息放入$contents數組
            $contents是一個二維數組
            第一組下標是區別每個物品各個不同的信息(如物品名,價錢,數量等等)
            第二組下標是區別不同的物品(這就是前面定義的$count變量的作用)
            */
            $count++; //物品數量加一(即下一個物品)
        }
        $total = $this->cart_total($table, $session);
        $contents[final] = $total;
        /*
        同時調用上面那個cart_total函數,計算下總價錢
        並放入$contents數組中
        */

        return $contents;
        /*
        將該數組返回
        */
    }


    function num_items($table, $session) {
    /*
    返回物品種類總數(也就是說,兩個相同的東西算一種    好像是廢話- -!)
    */
        $query = SELECT * FROM $table WHERE session='$session' ;
        $result = mysql_query($query);
        $num_rows = mysql_num_rows($result);
        return $num_rows;
        /*
        取出車中所有物品,獲取該操作影響的數據庫行數,即物品總數(沒什麼好說的)
        */
    }

    function quant_items($table, $session) {
    /*
    返回所有物品總數(也就是說,兩個相同的東西也算兩個物品   - -#)
    */
        $quant = 0;// 物品總量
        $query = SELECT * FROM $table WHERE session='$session' ;
        $result = mysql_query($query);
        while($row = mysql_fetch_object($result)) {
        /*
        把每種物品逐個取出
        */
            $quant += $row->quantity; //該物品數量加到總量裡去
        }
        return $quant; //返回總量
    }

}

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved