-
-
/**
- * php 購物車
- * Edit bbs.it-home.org
- */
//購物車session的產生代碼
- if(! $session && ! $scid) {
- /*
- session用來區別每一個購物車,相當於每輛車的身分證號;
- scid只用來標示一個購物車id號,可以看做是每個車的名字;
- 當該購物車的id和session值兩者都不存在時,就產生一個新購物車
- */
- $session = md5(uniqid(rand()));
- /*
- 產生一個唯一的購物車session號
- rand()先產生個隨機數,uniqid()再在該隨機數的基礎上產生一個獨特的字串,最後對該字串進行md5
- */
- SetCookie(scid, $session, time() + 14400);
- /*
- 設定該購物車cookie
- 變數名稱:scid(不知到這裡是不是少了一個$號呢?=》更正: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() 類似,只有一點區別- 返回一個物件而不是數組。】
- 取一筆記錄中的某個字段,應該用「->」而不是像數組一樣用下標
- */
- }
- }
- 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);
- /*
- mysql_query( $query);
- /*
- 刪除該php購物車中該類物品
- */
- }
- 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🎜>$contents[price][ $count] = $row🎜>$contents[price][ $count] = $row_ ->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; //回傳總量
- }
- }
- ?>
-
複製程式碼
|