php中cookie+mysql實現的購物車代碼

來源:互聯網
上載者:User

電商網站開發過程中購物車實現是必要的功能,本文為大家介紹php 購物車代碼的實現。

原理:cookie存購物車ID,資料庫存購物車資料。

 代碼如下 複製代碼

<?php
//購物車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() 類似,只有一點區別 - 返回一個對象而不是數組。】
   上面這句話摘自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; //返回總量
 }
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.