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编程中八种常见的文件操作方式
Nov 19 PHP
php中文字母数字验证码实现代码
Apr 25 PHP
php侧拉菜单 漂亮,可以向右或者向左展开,支持FF,IE
Oct 15 PHP
PHP写的获取各搜索蜘蛛爬行记录代码
Aug 21 PHP
C#使用PHP服务端的Web Service通信实例
Apr 08 PHP
PHP中substr()与explode()函数用法分析
Nov 24 PHP
php通过curl模拟登陆DZ论坛
May 11 PHP
php用正则判断是否为数字的方法
Mar 25 PHP
简单的pgsql pdo php操作类实现代码
Aug 25 PHP
PHP基本语法实例总结
Sep 09 PHP
PhpStorm本地断点调试的方法步骤
May 21 PHP
thinkPHP框架实现多表查询的方法
Jun 14 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中$_SERVER[PHP_SELF] 和 $_SERVER[SCRIPT_NAME]之间的区别
2009/09/05 PHP
php配置php-fpm启动参数及配置详解
2013/11/04 PHP
async和DOM Script文件加载比较
2014/07/20 PHP
php 在线导入mysql大数据程序
2015/06/11 PHP
thinkphp,onethink和thinkox中验证码不显示的解决方法分析
2016/06/06 PHP
laravel框架邮箱认证实现方法详解
2019/11/22 PHP
在网站上应该用的30个jQuery插件整理
2011/11/03 Javascript
JS的replace方法详细介绍
2012/11/09 Javascript
jquery实现带单选按钮的表格行选中时高亮显示
2013/08/01 Javascript
js实现同一页面多个不同运动效果的方法
2015/04/10 Javascript
教你使用javascript简单写一个页面模板引擎
2015/05/05 Javascript
jQuery模拟Marquee实现无缝滚动效果完整实例
2016/09/29 Javascript
使用store来优化React组件的方法
2017/10/23 Javascript
微信小程序中添加客服按钮contact-button功能
2018/04/27 Javascript
解决vue select当前value没有更新到vue对象属性的问题
2018/08/30 Javascript
jQuery中使用validate插件校验表单功能
2019/05/24 jQuery
vue实现图片预览组件封装与使用
2019/07/13 Javascript
Vue动态生成表格的行和列
2019/07/18 Javascript
[48:21]林俊杰圣堂刺客超神杀戮秀
2014/10/29 DOTA
Python实现获取域名所用服务器的真实IP
2015/10/25 Python
Tensorflow使用tfrecord输入数据格式
2018/06/19 Python
详解django.contirb.auth-认证
2018/07/16 Python
使用 Visual Studio Code(VSCode)搭建简单的Python+Django开发环境的方法步骤
2018/12/17 Python
python psutil监控进程实例
2019/12/17 Python
HTML5的结构和语义(1):前言
2008/10/17 HTML / CSS
Unix如何添加新的用户
2014/08/20 面试题
物流专业大学生求职信范文
2013/10/28 职场文书
学习委员自我鉴定
2014/01/13 职场文书
党员领导干部廉洁从政承诺书
2014/03/27 职场文书
《孔繁森》教学反思
2014/04/17 职场文书
2014年安全生产目标责任书
2014/07/23 职场文书
暑期社会实践心得体会
2014/09/02 职场文书
三严三实心得体会范文
2014/10/13 职场文书
房屋产权证明书
2014/10/15 职场文书
环保守法证明
2015/06/24 职场文书
网络营销实训总结
2015/08/03 职场文书