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 相关文章推荐
4.与数据库的连接
Oct 09 PHP
php结合表单实现一些简单功能的例子
Jun 04 PHP
应用开发中涉及到的css和php笔记分享
Aug 02 PHP
深入PHP magic quotes的详解
Jun 17 PHP
PHP批量检测并去除文件BOM头代码实例
May 08 PHP
async和DOM Script文件加载比较
Jul 20 PHP
php校验表单检测字段是否为空的方法
Mar 20 PHP
php微信支付接口开发程序
Aug 02 PHP
PHP进制转换实例分析(2,8,16,36,64进制至10进制相互转换)
Feb 04 PHP
关于php几种字符串连接的效率比较(详解)
Feb 22 PHP
php工具型代码之印章抠图
Jul 18 PHP
关于laravel 日志写入失败问题汇总
Oct 17 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
php4的彩蛋
2006/10/09 PHP
解析argc argv在php中的应用
2013/06/24 PHP
php输入流php://input使用浅析
2014/09/02 PHP
php自动更新版权信息显示的方法
2015/06/19 PHP
PHP实现通过CURL上传文件功能示例
2018/05/30 PHP
thinkphp5使html5实现动态跳转的例子
2019/10/16 PHP
PHP与Web页面交互操作实例分析
2020/06/02 PHP
Laravel中如何轻松容易的输出完整的SQL语句
2020/07/26 PHP
JSON为什么那样红为什么要用json(另有洞天)
2012/12/26 Javascript
javascript dom追加内容实现示例
2013/09/21 Javascript
nodejs 实现模拟form表单上传文件
2014/07/14 NodeJs
一个字符串反转函数可实现字符串倒序
2014/09/15 Javascript
使用js画图之画切线
2015/01/12 Javascript
深入理解JavaScript系列(17):面向对象编程之概论详细介绍
2015/03/04 Javascript
浅谈Nodejs中的作用域问题
2016/12/26 NodeJs
JS高仿抛物线加入购物车特效实现代码
2017/02/20 Javascript
纯原生js实现贪吃蛇游戏
2020/04/16 Javascript
vue实现点击图片放大效果
2017/08/15 Javascript
改变vue请求过来的数据中的某一项值的方法(详解)
2018/03/08 Javascript
BootStrap table实现表格行拖拽效果
2018/12/01 Javascript
vue2路由基本用法实例分析
2020/03/06 Javascript
JavaScript随机数的组合问题案例分析
2020/05/16 Javascript
Python闭包的两个注意事项(推荐)
2017/03/20 Python
Python常见工厂函数用法示例
2018/03/21 Python
深入分析python数据挖掘 Json结构分析
2018/04/21 Python
如何利用Boost.Python实现Python C/C++混合编程详解
2018/11/08 Python
怎么快速自学python
2020/06/22 Python
美国Curacao百货连锁店网站:iCuracao.com
2019/07/20 全球购物
Super-Pharm波兰:药房和香水在一个地方
2020/08/18 全球购物
大学考试作弊检讨书
2014/01/30 职场文书
幼儿发展评估方案
2014/06/11 职场文书
2014预防青少年违法犯罪工作总结
2014/12/10 职场文书
暖春观后感
2015/06/08 职场文书
有关水浒传的读书笔记
2015/06/25 职场文书
圣诞晚会主持词
2015/07/01 职场文书
javascript进阶篇深拷贝实现的四种方式
2022/07/07 Javascript