php利用cookies实现购物车的方法


Posted in PHP onDecember 10, 2014

本文实例讲述了php利用cookies实现购物车的方法。分享给大家供大家参考。具体分析如下:

php购物车是在电子商务网站会用到的,一种像超市购物车一样的,选好商品了,先放到自己的购物车里面等好了再到柜台结算,本款php购物车完全按照这个原理来实例的,感兴趣的朋友可以来看看,该实例利用了cookie来实现,代码如下:

<?php 

/** 

 * 购物车类 cookies 保存,保存周期为1天 注意:浏览器必须支持cookie才能够使用 

 */ 

class cartapi { 

 private $cartarray = array(); // 存放购物车的二维数组 

 private $cartcount; // 统计购物车数量 

 public $expires = 86400; // cookies过期时间,如果为0则不保存到本地 单位为秒 

 /** 

  * 构造函数 初始化操作 如果$id不为空,则直接添加到购物车 

  * 

  */ 

 public function __construct($id = "",$name = "",$price1 = "",$price2 = "",$price3 = "",$count = "",$image = "",$expires = 86400) { 

  if ($id != "" && is_numeric($id)) { 

   $this->expires = $expires; 

   $this->addcart($id,$name,$price1,$price2,$price3,$count,$image); 

  } 

 } 

 /** 

  * 添加商品到购物车 

  * 

  * @param int $id 商品的编号 

  * @param string $name 商品名称 

  * @param decimal $price1 商品价格 

  * @param decimal $price2 商品价格 

  * @param decimal $price3 商品价格 

  * @param int $count 商品数量 

  * @param string $image 商品图片 

  * @return 如果商品存在,则在原来的数量上加1,并返回false 

  */ 

 public function addcart($id,$name,$price1,$price2,$price3,$count,$image) { 

  $this->cartarray = $this->cartview(); // 把数据读取并写入数组 

  if ($this->checkitem($id)) { // 检测商品是否存在 

   $this->modifycart($id,$count,0); // 商品数量加$count 

   return false; 

  } 

  $this->cartarray[0][$id] = $id; 

  $this->cartarray[1][$id] = $name; 

  $this->cartarray[2][$id] = $price1; 

  $this->cartarray[3][$id] = $price2; 

  $this->cartarray[4][$id] = $price3; 

  $this->cartarray[5][$id] = $count; 

  $this->cartarray[6][$id] = $image; 

  $this->save(); 

 } 

 /** 

  * 修改购物车里的商品 

  * 

  * @param int $id 商品编号 

  * @param int $count 商品数量 

  * @param int $flag 修改类型 0:加 1:减 2:修改 3:清空 

  * @return 如果修改失败,则返回false 

  */ 

 public function modifycart($id, $count, $flag = "") { 

  $tmpid = $id; 

  $this->cartarray = $this->cartview(); // 把数据读取并写入数组 

  $tmparray = &$this->cartarray;  // 引用 

  if (!is_array($tmparray[0])) return false; 

  if ($id < 1) { 

   return false; 

  } 

  foreach ($tmparray[0] as $item) { 

   if ($item === $tmpid) { 

    switch ($flag) { 

     case 0: // 添加数量 一般$count为1 

      $tmparray[5][$id] += $count; 

      break; 

     case 1: // 减少数量 

      $tmparray[5][$id] -= $count; 

      break; 

     case 2: // 修改数量 

      if ($count == 0) { 

       unset($tmparray[0][$id]); 

       unset($tmparray[1][$id]); 

       unset($tmparray[2][$id]); 

       unset($tmparray[3][$id]); 

       unset($tmparray[4][$id]); 

       unset($tmparray[5][$id]); 

       unset($tmparray[6][$id]); 

       break; 

      } else { 

       $tmparray[5][$id] = $count; 

       break; 

      } 

     case 3: // 清空商品 

      unset($tmparray[0][$id]); 

      unset($tmparray[1][$id]); 

      unset($tmparray[2][$id]); 

      unset($tmparray[3][$id]); 

      unset($tmparray[4][$id]); 

      unset($tmparray[5][$id]); 

      unset($tmparray[6][$id]); 

      break; 

     default: 

      break; 

    } 

   } 

  } 

  $this->save(); 

 } 

 /** 

  * 清空购物车 

  * 

  */ 

 public function removeall() { 

  $this->cartarray = array(); 

  $this->save(); 

 } 

 /** 

  * 查看购物车信息 

  * 

  * @return array 返回一个二维数组 

  */ 

 public function cartview() { 

  $cookie = strips教程lashes($_cookie['cartapi']); 

  if (!$cookie) return false; 

  $tmpunserialize = unserialize($cookie); 

  return $tmpunserialize; 

 } 

 /** 

  * 检查购物车是否有商品 

  * 

  * @return bool 如果有商品,返回true,否则false 

  */ 

 public function checkcart() { 

  $tmparray = $this->cartview(); 

  if (count($tmparray[0]) < 1) {    

   return false; 

  } 

  return true; 

 } 

 /** 

  * 商品统计 

  * 

  * @return array 返回一个一维数组 $arr[0]:产品1的总价格 $arr[1:产品2得总价格 $arr[2]:产品3的总价格 $arr[3]:产品的总数量 

  */ 

 public function countprice() { 

  $tmparray = $this->cartarray = $this->cartview(); 

  $outarray = array(); //一维数组 

  // 0 是产品1的总价格 

  // 1 是产品2的总价格 

  // 2 是产品3的总价格 

  // 3 是产品的总数量 

  $i = 0; 

  if (is_array($tmparray[0])) { 

   foreach ($tmparray[0] as $key=>$val) { 

    $outarray[0] += $tmparray[2][$key] * $tmparray[5][$key]; 

    $outarray[1] += $tmparray[3][$key] * $tmparray[5][$key]; 

    $outarray[2] += $tmparray[4][$key] * $tmparray[5][$key]; 

    $outarray[3] += $tmparray[5][$key]; 

    $i++; 

   } 

  } 

  return $outarray; 

 } 

 /** 

  * 统计商品数量 

  * 

  * @return int 

  */ 

 public function cartcount() { 

  $tmparray = $this->cartview(); 

  $tmpcount = count($tmparray[0]); 

  $this->cartcount = $tmpcount; 

  return $tmpcount; 

 } 

 /** 

  * 保存商品 如果不使用构造方法,此方法必须使用 

  * 

  */ 

 public function save() { 

  $tmparray = $this->cartarray; 

  $tmpserialize = serialize($tmparray); 

  setcookie("cartapi",$tmpserialize,time()+$this->expires); 

 } 

 /** 

  * 检查购物车商品是否存在 

  * 

  * @param int $id 

  * @return bool 如果存在 true 否则false 

  */ 

 private function checkitem($id) { 

  $tmparray = $this->cartarray; 

  if (!is_array($tmparray[0])) return; 

  foreach ($tmparray[0] as $item) { 

   if ($item === $id) return true; 

  } 

  return false; 

 } 

} 

?>

希望本文所述对大家的PHP程序设计有所帮助。

PHP 相关文章推荐
NT IIS下用ODBC连接数据库
Oct 09 PHP
PHP date函数参数详解
Nov 27 PHP
rrmdir php中递归删除目录及目录下的文件
May 15 PHP
php文件上传的简单实例
Oct 19 PHP
PHP冒泡算法详解(递归实现)
Nov 10 PHP
php使用date和strtotime函数输出指定日期的方法
Nov 14 PHP
php去掉文件前几行的方法
Jul 29 PHP
ThinkPHP中order()使用方法详解
Apr 19 PHP
浅析Laravel5中队列的配置及使用
Aug 04 PHP
SCP远程VPS快速搬家和WDCP升级php5.3安装memcached和eaccelerator教程
Jul 27 PHP
PHP PDOStatement::getAttribute讲解
Feb 01 PHP
YII框架http缓存操作示例
Apr 29 PHP
php针对cookie操作的队列操作类实例
Dec 10 #PHP
php利用cookie实现自动登录的方法
Dec 10 #PHP
PHP使用header()输出图片缓存实例
Dec 09 #PHP
PHP实现服务器状态监控的方法
Dec 09 #PHP
PHP里8个鲜为人知的安全函数分析
Dec 09 #PHP
php实现MySQL数据库备份与还原类实例
Dec 09 #PHP
两个php日期控制类实例
Dec 09 #PHP
You might like
ThinkPHP3.0略缩图不能保存到子目录的解决方法
2012/09/30 PHP
PHP对象的浅复制与深复制的实例详解
2017/10/26 PHP
基于php伪静态的实现方法解析
2020/07/31 PHP
Javascript 倒计时源代码.(时.分.秒) 详细注释版
2011/05/09 Javascript
jQuery实现长文字部分显示代码
2013/05/13 Javascript
jQuery背景插件backstretch使用指南
2015/04/21 Javascript
关于js里的this关键字的理解
2015/08/17 Javascript
JavaScript中Boolean对象的属性解析
2015/10/21 Javascript
jQuery Easyui 下拉树组件combotree
2016/12/16 Javascript
详解vue项目优化之按需加载组件-使用webpack require.ensure
2017/06/13 Javascript
jQuery实现表单动态加减、ajax表单提交功能
2018/06/08 jQuery
vue实现点击关注后及时更新列表功能
2018/06/26 Javascript
element-ui 关于获取select 的label值方法
2018/08/24 Javascript
[00:12]2018DOTA2亚洲邀请赛 sylar表现SOLO技艺
2018/04/06 DOTA
[01:32]完美世界DOTA2联赛10月29日精彩集锦
2020/10/30 DOTA
python获取文件扩展名的方法
2015/07/06 Python
浅谈python中的数字类型与处理工具
2017/08/02 Python
利用Python如何生成便签图片详解
2018/07/09 Python
Python实现的简单读写csv文件操作示例
2018/07/12 Python
python操作文件的参数整理
2019/06/11 Python
python SQLAlchemy 中的Engine详解
2019/07/04 Python
python集合常见运算案例解析
2019/10/17 Python
Tensorflow全局设置可见GPU编号操作
2020/06/30 Python
html5文字阴影效果text-shadow使用示例
2013/07/25 HTML / CSS
国际领先的学术出版商:Springer
2017/01/11 全球购物
MYSQL支持事务吗
2013/08/09 面试题
护士实习生自我鉴定范文
2013/12/10 职场文书
化工专业大学生职业生涯规划书
2014/01/14 职场文书
班组长岗位职责
2014/03/03 职场文书
学徒工职责
2014/03/06 职场文书
聚美优品广告词改编
2014/03/14 职场文书
汽车销售员工作总结
2015/08/12 职场文书
《围炉夜话》110句人生箴言,精辟有内涵,引人深思
2019/10/23 职场文书
SpringBoot快速入门详解
2021/07/21 Java/Android
Node-Red实现MySQL数据库连接的方法
2021/08/07 MySQL
Java8 CompletableFuture 异步回调
2022/04/28 Java/Android