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

php中cookie+mysql实现的购物车代码的更多相关文章

  1. ASP.NET中Cookie跨域的问题及解决代码

    ASP.NET中Cookie跨域的问题及解决代码 http://www.liyumei.net.cn/post/share18.html Cookies揭秘  http://www.cnblogs.c ...

  2. 为WAMP中的mysql设置密码(默认为空)

    为WAMP中的mysql设置密码 WAMP安装好后,mysql密码是为空的,那么要如何修改呢?其实很简单,通过几条指令就行了,下面我就一步步来操作. 1.首先,通过WAMP打开mysql控制台. 提示 ...

  3. js中cookie的使用详细分析

    JavaScript中的另一个机制:cookie,则可以达到真正全局变量的要求. cookie是浏览器 提供的一种机制,它将document 对象的cookie属性提供给JavaScript.可以由J ...

  4. Session id实现通过Cookie来传输方法及代码参考

    1. Web中的Session指的就是用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览这个网站所花费的时间.因此从上述的定义中我们可以看到,Session实际上是一个特定的 ...

  5. 转:js中cookie的使用详细分析

    cookie机制将信息存储于用户硬盘,因此可以作为全局变量,这是它最大的一个优点.它可以用于以下几种场合. (1)保存用户登录状态.例如将用户id存储于一个cookie内,这样当用户下次访问该页面时就 ...

  6. JS 中 cookie 的使用

    1.cookie 是什么? ①.cookie 是存储于访问者计算机中的变量.每当一台计算机通过浏览器来访问某个页面时,那么就可以通过 JavaScript 来创建和读取 cookie. ②.实际上 c ...

  7. js中cookie的使用具体分析

                   JavaScript中的还有一个机制:cookie,则能够达到真正全局变量的要求. cookie是浏览器 提供的一种机制,它将document 对象的cookie属性提供 ...

  8. 浅谈JS中的!=、== 、!==、===的用法和区别 JS中Null与Undefined的区别 读取XML文件 获取路径的方式 C#中Cookie,Session,Application的用法与区别? c#反射 抽象工厂

    浅谈JS中的!=.== .!==.===的用法和区别   var num = 1;     var str = '1';     var test = 1;     test == num  //tr ...

  9. mac中apache+mysql+php+phpMyAdmin配置备忘

    Mac OS X 内置Apache 和 PHP,使用起来非常方便.本文以Mac OS X 10.6.3和为例.主要内容包括: 启动Apache 运行PHP 安装MySQL 使用phpMyAdmin 配 ...

随机推荐

  1. Introduction to Windows 8: The Definitive Guide for Developer

    <Windows 8应用开发权威指南>介绍 Introduction to Windows 8: The Definitive Guide for Developer 一.封面设计要求及文 ...

  2. 怎么设置 mysql 多主复制

    更新 其实本文主要来自www.digitalocean.com ,但是我没有买他们家的 VPS 用来 demo 了.只是用vagrant 来模拟了. 介绍 说说关于通过两台 vps 来扩展 mysql ...

  3. 关于linux服务器的批量维护、批量升级、

    由于版权费用原因,众多中小服务器采用linux服务器进行功能处理.在进行批量升级.更新业务程序时.可以采用如下批量方案: 1.打包成rpm包,并配置yum源服务器,以支持个人的yum服务器进行处理.一 ...

  4. php中日期的加减法运算

    需求:通过对某个日期增加或减去几天,得到另外一个日期1.首先通过strtotime()获得日期的时间戳2.获得N天前得时间戳,通过”当前时间戳 - N天的秒数 = N天前得时间戳“3.对N天前得时间戳 ...

  5. Google十大惊人产品

    国外资讯网站BusinessInsider刊文细数了谷歌惊世骇俗的十大产品,范围从无人驾驶汽车到太空电梯再到高空风力发电,每一项都令人无限神往,充满未来感. 以下是谷歌十大惊人产品: 众所周知,谷歌并 ...

  6. 一个QQ木马的逆向分析浅谈(附带源码)

    程序流程:首先注册自己程序的窗口以及类等一系列窗口操作,安装了一个定时器,间隔为100ms,功能搜索QQ的类名,如果找到就利用FindWindow("5B3838F5-0C81-46D9-A ...

  7. iOS解决两个静态库的冲突 duplicate symbol

    http://blog.163.com/023_dns/blog/static/118727366201391544630380/ 场景: 解决TencentOpenAPI.framework与Zba ...

  8. Maven 玩 github上的项目

    第一步,使用maven创建了一个项目"helloworld",cmd命令如下: @echo offecho [INFO] Generating project in ./gener ...

  9. vs 折叠跟展开所有方法。

    Ctrl + M + O: 折叠所有方法 Ctrl + M + M: 折叠或者展开当前方法 Ctrl + M + L: 展开所有方法

  10. Android程序之全国天气预报查询接口演示

    一.项目演示效果如下: 二.使用 聚合数据SDK 注册账号-创建一个新应用(在个人中心页面-数据中心-申请数据)–填入自己的应用–找到分类–天气预报-全国天气预报 下载sdk (由于项目使用的是1点几 ...