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 相关文章推荐
PHP5 安装方法
Oct 09 PHP
php数据入库前清理 注意php intval与mysql的int取值范围不同
Dec 12 PHP
解析PHP获取当前网址及域名的实现代码
Jun 23 PHP
php获取操作系统语言代码
Nov 04 PHP
浅析PHP编程中10个最常见的错误
Aug 08 PHP
php格式化时间戳显示友好的时间实现思路及代码
Oct 23 PHP
php实现递归抓取网页类实例
Apr 03 PHP
ThinkPHP模型详解
Jul 27 PHP
php提高网站效率的技巧
Sep 29 PHP
Windows 下安装 swoole 图文教程(php)
Jun 05 PHP
PHP截取发动短信内容的方法
Jul 04 PHP
Yii支持多域名cors原理的实现
Dec 05 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 mysql数据库操作类
2008/06/04 PHP
php创建多级目录代码
2008/06/05 PHP
php 3行代码的分页算法(求起始页和结束页)
2009/10/21 PHP
PHP 设置MySQL连接字符集的方法
2011/01/02 PHP
深入解析PHP中的(伪)多线程与多进程
2013/07/01 PHP
Yii2下session跨域名共存的解决方案
2017/02/04 PHP
如何通过View::first使用Laravel Blade的动态模板详解
2017/09/21 PHP
ExtJS下grid的一些属性说明
2009/12/13 Javascript
javascript 文件的同步加载与异步加载实现原理
2012/12/13 Javascript
Jquery 自定义动画概述及示例
2013/03/29 Javascript
JS未跨域操作iframe里的DOM
2016/06/01 Javascript
JavaScript类型系统之布尔Boolean类型详解
2016/06/26 Javascript
基于对象合并功能的实现示例
2017/10/10 Javascript
微信小程序实现传参数的几种方法示例
2018/01/10 Javascript
react-router4 配合webpack require.ensure 实现异步加载的示例
2018/01/18 Javascript
ionic grid(栅格)九宫格制作详解
2018/06/30 Javascript
vue项目前端知识点整理【收藏】
2019/05/13 Javascript
如何基于filter实现网站整体变灰功能
2020/04/17 Javascript
用Python编写生成树状结构的文件目录的脚本的教程
2015/05/04 Python
python爬虫的工作原理
2017/03/05 Python
python实现折半查找和归并排序算法
2017/04/14 Python
在python里从协程返回一个值的示例
2019/02/19 Python
Python实现粒子群算法的示例
2021/02/14 Python
Pycharm制作搞怪弹窗的实现代码
2021/02/19 Python
CSS3实现div从下往上滑入滑出效果示例
2020/04/28 HTML / CSS
Peter Millar官网:美国高档生活服饰品牌
2018/07/02 全球购物
TUMI新加坡官网:国际领先的商旅箱包品牌
2019/01/12 全球购物
介绍一下Cookie和Session及他们之间的区别
2012/11/20 面试题
档案接收函
2014/01/13 职场文书
给护士表扬信
2014/01/19 职场文书
总经理司机职责
2014/02/02 职场文书
高中生操行评语
2014/04/25 职场文书
学校法制宣传日活动总结
2014/11/01 职场文书
管理人员岗位职责
2015/02/14 职场文书
快速学习Oracle触发器和游标
2021/06/30 Oracle
Redis高并发防止秒杀超卖实战源码解决方案
2021/11/01 Redis