热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PHP购物车产生代码

应一网友的要求,将其发的一段购物车类代码进行简单的分析,希望对需要的新手们有所帮助~本人也是新手,分析讲解的同时也相当于学习了,不对的地方大虾们赶紧指正哈,呵呵^^
应一网友的要求,将其发的一段购物车类代码进行简单的分析,希望对需要的新手们有所帮助~本人也是新手,分析讲解的同时也相当于学习了,不对的地方大虾们赶紧指正哈,呵呵^^

购物车session的产生代码:

  1. if(!$session && !$scid) {  
  2. /* 
  3. session用来区别每一个购物车,相当于每个车的身份证号; 
  4. scid只用来标识一个购物车id号,可以看做是每个车的名字; 
  5. 当该购物车的id和session值两者都不存在时,就产生一个新购物车 
  6. */ 
  7.     $session = md5(uniqid(rand()));  
  8.     /* 
  9.     产生一个唯一的购物车session号 
  10.     rand()先产生个随机数,uniqid()再在该随机数的基础上产生一个独一无二的字符串,最后对该字符串进行md5 
  11.     */ 
  12.     SetCOOKIE(scid, $session, time() + 14400);  
  13.     /* 
  14.     设置该购物车COOKIE 
  15.     变量名:scid(不知到这里是不是少了一个$号呢?) 
  16.     变量值:$session 
  17.     有效时间:当前时间+14400秒(4小时内) 
  18.     关于setCOOKIE函数的详细用法,大家还是参看php手册吧~ 
  19.     */ 
  20.  
  21. class Cart { //开始购物车类 
  22.     function check_item($table$session$product) { 
  23.     /* 
  24.     查验物品(表名,session,物品) 
  25.     */ 
  26.         $query = SELECT * FROM $table WHERE session='$session' AND product='$product' ; 
  27.         /* 
  28.         看一看'表'里该'购物车'中有没有该'产品' 
  29.         即,该产品有没有已经放入购物车 
  30.         */ 
  31.         $result = mysql_query($query); 
  32.         if(!$result) { 
  33.             return 0; 
  34.         } 
  35.         /* 
  36.         查询失败 
  37.         */ 
  38.         $numRows = mysql_num_rows($result); 
  39.         if($numRows == 0) { 
  40.             return 0; 
  41.         /* 
  42.         若没有找到,则返回0 
  43.         */ 
  44.         } else { 
  45.             $row = mysql_fetch_object($result); 
  46.             return $row->quantity; 
  47.             /* 
  48.             若找到,则返回该物品数量 
  49.             这里有必要解释一下mysql_fetch_object函数(下面还会用到): 
  50.             【mysql_fetch_object() 和 mysql_fetch_array() 类似,只有一点区别 - 返回一个对象而不是数组。】 
  51.             上面这句话摘自php手册,说得应该很明白了吧~ 
  52.             简单的说就是,取一条记录中的某个字段,应该用“->”而不是像数组一样用下标 
  53.             */ 
  54.         } 
  55.     } 
  56.     function add_item($table$session$product$quantity) { 
  57.     /* 
  58.     添加新物品(表名,session,物品,数量) 
  59.     */ 
  60.         $qty = $this->check_item($table$session$product); 
  61.         /* 
  62.         调用上面那个函数,先检查该类物品有没有已经放入车中 
  63.         */ 
  64.         if($qty == 0) { 
  65.             $query = INSERT INTO $table (session, product, quantity) VALUES ; 
  66.             $query .= ('$session''$product''$quantity') ; 
  67.             mysql_query($query); 
  68.             /*若车中没有,则像车中添加该物品*/ 
  69.         } else { 
  70.             $quantity += $qty//若有,则在原有基础上增加数量 
  71.             $query = UPDATE $table SET quantity='$quantity' WHERE session='$session' AND ; 
  72.             $query .= product='$product' ; 
  73.             mysql_query($query); 
  74.             /* 
  75.             并修改数据库 
  76.             */ 
  77.         } 
  78.     } 
  79.     function delete_item($table$session$product) { 
  80.     /* 
  81.     删除物品(表名,session,物品) 
  82.     */ 
  83.         $query = DELETE FROM $table WHERE session='$session' AND product='$product' ; 
  84.         mysql_query($query); 
  85.         /* 
  86.         删除该购物车中该类物品 
  87.         */ 
  88.     } 
  89.     function modify_quantity($table$session$product$quantity) { 
  90.     /* 
  91.     修改物品数量(表名,session,物品,数量) 
  92.     */ 
  93.         $query = UPDATE $table SET quantity='$quantity' WHERE session='$session' ; 
  94.         $query .= AND product='$product' ; 
  95.         mysql_query($query); 
  96.         /* 
  97.         将该物品数量修改为参数中的值 
  98.         */ 
  99.     } 
  100.     function clear_cart($table$session) { 
  101.     /* 
  102.     清空购物车(没什么好说) 
  103.     */ 
  104.         $query = DELETE FROM $table WHERE session='$session' ; 
  105.         mysql_query($query); 
  106.     } 
  107.     function cart_total($table$session) { 
  108.     /* 
  109.     车中物品总价 
  110.     */ 
  111.         $query = SELECT * FROM $table WHERE session='$session' ; 
  112.         $result = mysql_query($query); 
  113.         /* 
  114.         先把车中所有物品取出 
  115.         */ 
  116.         if(mysql_num_rows($result) > 0) { 
  117.             while($row = mysql_fetch_object($result)) { 
  118.             /* 
  119.             如果物品数量>0个,则逐个判断价格并计算 
  120.             */ 
  121.              
  122.                 $query = SELECT price FROM inventory WHERE product='$row->product' ; 
  123.                 $invResult = mysql_query($query); 
  124.                 /* 
  125.                 从inventory(库存)表中查找该物品的价格 
  126.                 */ 
  127.                 $row_price = mysql_fetch_object($invResult); 
  128.                 $total += ($row_price->price * $row->quantity); 
  129.                 /* 
  130.                 总价 += 该物品价格 * 该物品数量 
  131.                 ( 大家应该能看明白吧:) ) 
  132.                 */ 
  133.             } 
  134.         } 
  135.         return $total//返回总价钱 
  136.     } 
  137.  
  138.     function display_contents($table$session) { 
  139.     /* 
  140.     获取关于车中所有物品的详细信息 
  141.     */ 
  142.         $count = 0; 
  143.         /* 
  144.         物品数量计数 
  145.         注意,该变量不仅仅为了对物品数量进行统计,更重要的是,它将作为返回值数组中的下标,用来区别每一个物品! 
  146.         */ 
  147.         $query = SELECT * FROM $table WHERE session='$session' ORDER BY id ; 
  148.         $result = mysql_query($query); 
  149.         /* 
  150.         先取出车中所有物品 
  151.         */ 
  152.         while($row = mysql_fetch_object($result)) { 
  153.         /* 
  154.         分别对每一个物品进行取详细信息 
  155.         */ 
  156.             $query = SELECT * FROM inventory WHERE product='$row->product' ; 
  157.             $result_inv = mysql_query($query); 
  158.             /* 
  159.             从inventory(库存)表中查找该物品的相关信息 
  160.             */ 
  161.             $row_inventory = mysql_fetch_object($result_inv); 
  162.             $contents[product][$count] = $row_inventory->product; 
  163.             $contents[price][$count] = $row_inventory->price; 
  164.             $contents[quantity][$count] = $row->quantity; 
  165.             $contents[total][$count] = ($row_inventory->price * $row->quantity); 
  166.             $contents[description][$count] = $row_inventory->description; 
  167.             /* 
  168.             把所有关于该物品的详细信息放入$contents数组 
  169.             $contents是一个二维数组 
  170.             第一组下标是区别每个物品各个不同的信息(如物品名,价钱,数量等等) 
  171.             第二组下标是区别不同的物品(这就是前面定义的$count变量的作用) 
  172.             */ 
  173.             $count++; //物品数量加一(即下一个物品) 
  174.         } 
  175.         $total = $this->cart_total($table$session);  
  176.         $contents[final] = $total
  177.         /* 
  178.         同时调用上面那个cart_total函数,计算下总价钱 
  179.         并放入$contents数组中 
  180.         */ 
  181.         return $contents
  182.         /* 
  183.         将该数组返回 
  184.         */ 
  185.     } 
  186.  
  187.     function num_items($table$session) { 
  188.     /* 
  189.     返回物品种类总数(也就是说,两个相同的东西算一种    好像是废话- -!) 
  190.     */ 
  191.         $query = SELECT * FROM $table WHERE session='$session' ; 
  192.         $result = mysql_query($query); 
  193.         $num_rows = mysql_num_rows($result); 
  194.         return $num_rows
  195.         /* 
  196.         取出车中所有物品,获取该操作影响的数据库行数,即物品总数(没什么好说的) 
  197.         */ 
  198.     } 
  199.     function quant_items($table$session) { 
  200.     /* 
  201.     返回所有物品总数(也就是说,两个相同的东西也算两个物品   - -#) 
  202.     */ 
  203.         $quant = 0;// 物品总量 
  204.         $query = SELECT * FROM $table WHERE session='$session' ; 
  205.         $result = mysql_query($query); 
  206.         while($row = mysql_fetch_object($result)) { 
  207.         /* 
  208.         把每种物品逐个取出 
  209.         */ 
  210.             $quant += $row->quantity; //该物品数量加到总量里去 
  211.         } 
  212.         return $quant//返回总量 
  213.     } 

推荐阅读
author-avatar
哀公家园_678
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有