热门标签 | 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.     } 

推荐阅读
  • PHP 编程疑难解析与知识点汇总
    本文详细解答了 PHP 编程中的常见问题,并提供了丰富的代码示例和解决方案,帮助开发者更好地理解和应用 PHP 知识。 ... [详细]
  • 探讨一个老旧 PHP MySQL 系统中,时间戳字段不定期出现异常值的问题及其可能原因。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • CentOS7源码编译安装MySQL5.6
    2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 解决PHP与MySQL连接时出现500错误的方法
    本文详细探讨了当使用PHP连接MySQL数据库时遇到500内部服务器错误的多种解决方案,提供了详尽的操作步骤和专业建议。无论是初学者还是有经验的开发者,都能从中受益。 ... [详细]
  • 在哈佛大学商学院举行的Cyberposium大会上,专家们深入探讨了开源软件的崛起及其对企业市场的影响。会议指出,开源软件不仅为企业提供了新的增长机会,还促进了软件质量的提升和创新。 ... [详细]
  • 本文详细介绍了如何通过多种编程语言(如PHP、JSP)实现网站与MySQL数据库的连接,包括创建数据库、表的基本操作,以及数据的读取和写入方法。 ... [详细]
  • Navicat Premium 15 安装指南及数据库连接配置
    本文详细介绍 Navicat Premium 15 的安装步骤及其对多种数据库(如 MySQL 和 Oracle)的支持,帮助用户顺利完成软件的安装与激活。 ... [详细]
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
  • 本文探讨了适用于Spring Boot应用程序的Web版SQL管理工具,这些工具不仅支持H2数据库,还能够处理MySQL和Oracle等主流数据库的表结构修改。 ... [详细]
  • Windows 系统下 MySQL 8.0.11 的安装与配置
    本文详细介绍了在 Windows 操作系统中安装和配置 MySQL 8.0.11 的步骤,包括环境准备、安装过程以及后续配置,帮助用户顺利完成数据库的部署。 ... [详细]
  • 本文深入探讨了如何通过调整InnoDB的关键配置参数来优化MySQL的随机IO性能,涵盖了缓存、日志文件、预读机制等多个方面,帮助读者全面提升数据库系统的性能。 ... [详细]
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社区 版权所有