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; //返回總量 } }
|