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 相关文章推荐
php strtotime 函数UNIX时间戳
Jan 14 PHP
收集的二十一个实用便利的PHP函数代码
Apr 22 PHP
php URL跳转代码 减少外链
Jun 25 PHP
PHP 杂谈《重构-改善既有代码的设计》之五 简化函数调用
May 07 PHP
php图片加水印原理(超简单的实例代码)
Jan 18 PHP
php 批量替换html标签的实例代码
Nov 26 PHP
一个不易被发现的PHP后门代码解析
Jul 05 PHP
php基于CodeIgniter实现图片上传、剪切功能
May 14 PHP
PHP命令Command模式用法实例分析
Aug 08 PHP
详解php中生成标准uuid(guid)的方法
Apr 28 PHP
Yii redis集合的基本使用教程
Jun 14 PHP
PhpSpreadsheet中文文档 | Spreadsheet操作教程实例
Apr 01 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
php学习之 数组声明
2011/06/09 PHP
PHP扩展CURL的用法详解
2014/06/20 PHP
PHP错误Warning:mysql_query()解决方法
2015/10/24 PHP
PHP导出Excel实例讲解
2016/01/24 PHP
CentOS下搭建PHP环境与WordPress博客程序的全流程总结
2016/05/07 PHP
Laravel源码解析之路由的使用和示例详解
2018/09/27 PHP
用JavaScript获取DOM元素位置和尺寸大小的方法
2013/04/12 Javascript
开发中可能会用到的jQuery小技巧
2014/03/07 Javascript
JSON相关知识汇总
2015/07/03 Javascript
javascript中递归函数用法注意点
2015/07/30 Javascript
js实现跨域的4种实用方法原理分析
2015/10/29 Javascript
js表单中选择框值的获取及表单的序列化
2015/12/17 Javascript
javascript超过容器后显示省略号效果的方法(兼容一行或者多行)
2016/07/14 Javascript
JavaScript中cookie工具函数封装的示例代码
2016/10/11 Javascript
js图片延迟加载(Lazyload)三种实现方式
2017/03/01 Javascript
nodejs实现截取上传视频中一帧作为预览图片
2017/12/10 NodeJs
微信小程序登录换取token的教程
2018/05/31 Javascript
原生JavaScript实现remove()和recover()功能示例
2018/07/24 Javascript
JS事件循环机制event loop宏任务微任务原理解析
2020/08/04 Javascript
[02:12]Dota 2 推出全新英雄—— 电炎绝手
2019/08/23 DOTA
Python中分数的相关使用教程
2015/03/30 Python
Python高级用法总结
2018/05/26 Python
Python实现的简单线性回归算法实例分析
2018/12/26 Python
python提取照片坐标信息的实例代码
2019/08/14 Python
Python常用模块os.path之文件及路径操作方法
2019/12/03 Python
python实现查找所有程序的安装信息
2020/02/18 Python
关于Keras Dense层整理
2020/05/21 Python
Python脚本打包成可执行文件过程解析
2020/10/20 Python
在网上学习全世界最好的课程:Coursera
2017/11/07 全球购物
西班牙品牌鞋子、服装和配饰在线商店:Esdemarca
2021/02/17 全球购物
简单叙述一下MYSQL的优化
2016/05/09 面试题
对孩子的寄语
2014/04/09 职场文书
大二学生自我检讨书
2014/10/23 职场文书
2014年工作总结及2015工作计划
2014/12/12 职场文书
民政工作个人总结
2015/02/28 职场文书
2015年安置帮教工作总结
2015/05/22 职场文书