PHP+MYSQL+SESSION+ThinkPHP实现简单购物车功能

本文介绍如何使用PHP、MYSQL和SESSION实现基本的购物车功能,包括商品添加、删除、数量修改和购物车信息统计。


PHP+MYSQL+SESSION实现简单购物车功能,

功能列表如下:

  • 1、将物品存入购物车
  • 2、将购物车物品删除
  • 3、修改购物物品购买数量【+1/-1】
  • 4、对购物车物品进行统计
    • 4.1、总项目
    • 4.2、总数量
    • 4.3、总金额
  • 5、对购物车单项物品的数量及金额进行统计
  • 6、清空购物车

class MycartAction{


函数01、function addGoods

	/**
	 * 函数:addGoods
	 * 功能:将物品放入购物车[SESSION]中
	 * 简介:将指定物品信息$goods存入指定名$cartName的购物车中,默认在物品信息首部附加“购物车物品序号”$skey
	 * 时间:2011年7月28日 23:51:40
	 * 作者:zhjp
	 * Enter description here ...
	 * 待完善项:在存入购物车之前先进行判断所选物品是否已经存在,是:只修改购买数量、否:存入购物车
	 * @param String $cartName
	 * @param String $goodsStr
	 */
	public function addGoods($cartName, $goodsStr){
		$skey=count($_SESSION[$cartName]);
		//处理物品信息
		$goodsStr=$skey.','.$goodsStr;
		switch ($cartName){
			case 'flyCart':
				break;
			case 'mallCart':
				//配置物品字段,返回可读性更强的数组格式的物品信息
				$goodsArr=$this->_setGoodsFields($goodsStr);
				break;
			case 'hotelCart':
				break;
		}
		//物品存入购物车
		$_SESSION[$cartName][$skey]=$goodsArr;
		//更新购物车信息
		$this->_updateCart($cartName);
	}

函数02、function delGoods

	/**
	 * 函数:delGoods
	 * 功能:删除购物车[SESSION]中的某一物品
	 * 简介:根据提供的购物车名$cartName及指定购物车物品序号$skey将该物品记录置空值
	 * 时间:2011年7月30日 23:00:59
	 * 作者:by zhjp
	 * Enter description here ...
	 * @param String $cartName
	 * @param Int $skey
	 */
	public function delGoods($cartName, $skey){
		if(!isset($_SESSION[$cartName])){ return ; }
		if($_SESSION[$cartName]['ITEMS']==1){
		//	$this->clearAll($cartName);
		}else{
			//删除指定物品
			$_SESSION[$cartName][$skey]=null;
		}
		//更新购物车信息
		$this->_updateCart($cartName);

	}

函数03、function clearAll

	/**
	 * 函数:clearAll
	 * 功能:清空购物车中的所有物品信息
	 * 简介:根据提供的购物车名$cartName将该购物车清空
	 * 时间:2011年7月30日 23:07:21
	 * 作者:by zhjp
	 * Enter description here ...
	 * @param String $cartName
	 */
	public function clearAll($cartName){
		if(isset($_SESSION[$cartName])){ 
			unset($_SESSION[$cartName]);
		}else{
			return ;
		}
	}

函数04、function editCart

/**
	 * 函数:editCart
	 * 功能:编辑购物车信息[物品购物数量+1-1]
	 * 简介:根据提供的购物车名$cartName及操作名$action结合指定购物车物品序号$skey对指定物品的购买数量进行+1-1操作
	 * 时间:2011年7月30日 23:09:27
	 * 作者:by zhjp
	 * Enter description here ...
	 * @param String $cartName
	 * @param String $action[plus+][minus-]
	 * @param Int $skey
	 */
	public function editCart($cartName, $action, $skey){
		if(!isset($_SESSION[$cartName])){return ;}
		switch ($action){
			case 'plus':
				$this->_plusOne($cartName, $skey);
				break;
			case 'minus':
				$this->_minusOne($cartName, $skey);
				break;
		}
		//更新购物车信息
		$this->_updateCart($cartName);
	}

函数05、function searchGoods

/**
	 * 函数:searchGoods
	 * 功能:查找购物车物品信息
	 * 简介:可供添加物品操作调用,如果所添加物品已存在则购物数量+1,反之将物品存入购物车
	 * 时间:2011年8月1日19:14:23
	 * 作者:by zhjp
	 * Enter description here ...
	 */
	public function searchGoods(){

	}

函数06、function getCartInfo

/**
	 * 函数:getCartInfo
	 * 功能:获取购物车基本信息【二维数组格式呈现TDArr】
	 * 简介:将购物车中的基本信息数据转化成二维数组【总项目items】【总数量total】【总金额money】
	 * 时间:2011年7月30日 23:14:20
	 * 作者:by zhjp
	 * Enter description here ...
	 * @param String $cartName
	 */
	public function getCartInfo($cartName){
		if(!isset($_SESSION[$cartName])){return ;}
		$infoArr=array();
		if(isset($_SESSION[$cartName])){
			$items=$_SESSION[$cartName]['ITEMS'];
			$total=$_SESSION[$cartName]['TOTAL'];
			$money=$_SESSION[$cartName]['MONEY'];
			$infoArr=array('ITEMS'=>$items,'TOTAL'=>$total,'MONEY'=>$money);
		}else{
			unset($infoArr);
		}
		return $infoArr;
	}

函数07、function getCartList

/**
	 * 函数:getCartList
	 * 功能:获取购物车所有的商品数据【二维数组格式呈现TDArr】
	 * 简介:将购物车中的全部商品数据转化成二维数组,不带HTML代码符
	 * 时间:2011年7月28日 23:56:38
	 * 作者:zhjp
	 * Enter description here ...
	 * @param String $cartName
	 */
	public function getCartList($cartName){

		if(isset($_SESSION[$cartName])){
			$allGoodsTDArr=array();
			foreach ($_SESSION[$cartName] as $k=>$v){
				if(is_array($v)){
					$allGoodsTDArr[]=$v;
				}
			}
		}
		return $allGoodsTDArr;
	}

函数08、function _setGoodsFields

/**
	 * 函数:_setGoodsFields
	 * 功能:配置物品字段,将一条物品记录字符串转化成有相应字段名的数组
	 * 简介:
	 * 0   1  2    3    4      5     6
	 * key id code name extend price numb money
	 * 其中key为购物车商品记录对应的SESSION数组key
	 * 时间:2011年7月28日 23:27:59
	 * 作者:by zhjp
	 * Enter description here ...
	 * @param unknown_type $goodsStr
	 */
	private function _setGoodsFields($goodsStr){
		//id,code,name,extend,price
		$str2Arr=split(',', $goodsStr);
		$goodsArr=array(
			'key'=>$str2Arr[0],
			'id'=>$str2Arr[1],
			'code'=>$str2Arr[2],
			'name'=>$str2Arr[3],
			'extend'=>$str2Arr[4],
			'price'=>$str2Arr[5],
			'numb'=>$str2Arr[6],
			'money'=>number_format($str2Arr[5]*$str2Arr[6],2));
		return $goodsArr;
	}

函数09、function _plusOne

/**
	 * 函数:_plusOne
	 * 功能:将物品的购买数量+1
	 * 简介:根据提供的购物车物品序号$skey将指定的商品数量+1
	 * 时间:2011年7月30日 23:24:26
	 * 作者:by zhjp
	 * Enter description here ...
	 * @param String $cartName
	 * @param Int $skey
	 */
	private function _plusOne($cartName, $skey){
		if(!isset($_SESSION[$cartName])){ return ;}
		//指定物品购买数量+1
		$_SESSION[$cartName][$skey]['numb']+=1;
		//更新小计金额
		$price=$_SESSION[$cartName][$skey]['price'];
		$numb=$_SESSION[$cartName][$skey]['numb'];
		$_SESSION[$cartName][$skey]['money']=number_format($price*$numb,2);
		//更新购物车信息
		$this->_updateCart($cartName);
	}

函数10、function _minusOne

/**
	 * 函数:_minusOne
	 * 功能:将物品的购买数量-1
	 * 简介:根据提供的购物车物品序号$skey将指定的商品数量-1
	 * 时间:2011年7月30日 23:27:19
	 * 作者:by zhjp
	 * Enter description here ...
	 * @param unknown_type $cartName
	 * @param unknown_type $skey
	 */
	private function _minusOne($cartName, $skey){
		if(!isset($_SESSION[$cartName])){ return ;}
		//指定物品购买数量-1
		if($_SESSION[$cartName][$skey]['numb']>1){
			$_SESSION[$cartName][$skey]['numb']-=1;
			//更新小计金额
			$price=$_SESSION[$cartName][$skey]['price'];
			$numb=$_SESSION[$cartName][$skey]['numb'];
			$_SESSION[$cartName][$skey]['money']=number_format($price*$numb,2);
		}
		//更新购物车信息
		$this->_updateCart($cartName);
	}

函数11、function _countMoney

/**
	 * 函数:_countMoney
	 * 功能:统计购物车物品总金额
	 * 简介:总金额[MONEY]
	 * 时间:2011年7月31日 03:17:52
	 * 作者:by zhjp
	 * Enter description here ...
	 * @param String $cartName
	 */
	private function _countMoney($cartName){
		if(!isset($_SESSION[$cartName])){ return ;}
		$count=0.0;
		switch ($cartName){
			case 'flyCart':
				break;
			case 'mallCart':
				$cartList=$this->getCartList($cartName);
				foreach ($cartList as $k=>$v){
					$count+=$v['money'];
				}
				$_SESSION[$cartName]['MONEY']=number_format($count,2);
				break;
			case 'hotelCart':
				break;
		}
	}

函数12、function _countItems

/**
	 * 函数:_countItems
	 * 功能:统计购物车物品总项目
	 * 简介:总项目[ITEMS]
	 * 时间:2011年7月31日 03:23:20
	 * 作者:by zhjp
	 * Enter description here ...
	 * @param String $cartName
	 */
	private function _countItems($cartName){
		if(!isset($_SESSION[$cartName])){ return ;}
		$count=0;
		switch ($cartName){
			case 'flyCart':
				break;
			case 'mallCart':
				$cartList=$this->getCartList($cartName);
				foreach ($cartList as $k=>$v){
					if(is_array($v)){
						$count++;
					}
				}
				$_SESSION[$cartName]['ITEMS']=$count;
				break;
			case 'hotelCart':
				break;
		}
	}

函数13、function _countTotal

/**
	 * 函数:_countTotal
	 * 功能:统计购物车物品总数量
	 * 简介:总数量[TOTAL]
	 * 时间:2011年7月31日 03:27:11
	 * 作者:by zhjp
	 * Enter description here ...
	 * @param String $cartName
	 */
	private function _countTotal($cartName){
		if(!isset($_SESSION[$cartName])){ return ;}
		$count=0;
		switch ($cartName){
			case 'flyCart':
				break;
			case 'mallCart':
				$cartList=$this->getCartList($cartName);
				foreach ($cartList as $k=>$v){
					$count+=$v['numb'];
				}
				$_SESSION[$cartName]['TOTAL']=$count;
				break;
			case 'hotelCart':
				break;
		}
	}

函数14、function _updateCart

/**
	 * 函数:_updateCart
	 * 功能:更新统计购物车基本信息
	 * 简介:重新统计购物车基本信息【总项目ITEMS/总金额MONEY/总数量TOTAL]
	 * 时间:2011年7月31日 03:31:18
	 * 作者:by zhjp
	 * Enter description here ...
	 * @param String $cartName
	 */
	private function _updateCart($cartName){
		$this->_countItems($cartName);
		$this->_countMoney($cartName);
		$this->_countTotal($cartName);
	}

}

PS:实现的功能比较简单.

放在这里呢

一是作为自己的学习记录

二呢希望对同是初学路人甲有所帮助

Tips:完整DEMO下载,你可以狠狠的点击这里



评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值