动网论坛,站长建站首选,国内使用量最多的论坛软件 动网论坛官方技术讨论区 站长工具 申请属于您自己的免费论坛
首页 | 新闻资讯 | 网站运营 | 网络编程 | 数据库 | 服务器 | 网页设计 | 图像媒体 | 网络应用 | 搜索优化 | 资源下载 | 动网主机 | DVBOX
    本站内  互联网 ASP论坛  ASP.Net论坛  PHP论坛
  
   PHP → 阅读文章

 贴个购物车的类,只用了一个Session

作者来源: 
阅读 数 498 人次 , 2006-3-29 4:08:00 


各位可根据自己需要改一下,最大的特点是只用了一个session,有的地方是用了以前网上的一个购物车的类改写的,我也没有好好地整理过
<?php
class cart {

var $sortcount; //商品种类数
var $totalcost; //商品总金额
/* 所有的商品,如:$mycart[5][$name]:商品编号为5的名称
*  $mycart[5][$price]:商品编号为5的单价
*         $mycart[5][$count]:商品编号为5的数量
*  $mycart[5][$cost]:商品编号为5的合计金额
*/
var $mycart ;
var $id; //每类商品的id(数组)
var $name; //每类商品的名称(数组)
var $price; //每类商品的价格(数组)
var $count; //每类商品的件数(数组)
var $cost; //每类商品的价值(数组)

 
//******构造函数
function cart(){
$this->sortcount = 0 ;
$this->totalcost = 0 ;
$this->mycart = array() ;
session_start(); //初始化一个session
if(session_is_registered("mycart")==false) session_register('mycart');  
$this->update();
// $this->calculate();
 
}
 
//********私有,根据session的值更新类中相应数据
function update(){
session_start(); //初始化一个session
$mycart = $_session["mycart"] ;
if(false==$mycart)
{
$this->sortcount = 0 ;
$this->totalcost = 0 ;
$this->mycart = array() ;
return false;
}
//得到商品的总数量
$this->sortcount=count($mycart);
if($this->sortcount>0)
{
//开始计算商品的金额
$totalcost = 0 ;
foreach($mycart as $key=>$val)
{
//先四舍五入
foreach($val as $proname=>$proval)
{
if($proname !="name")
{
$val[$proname] = round(eregi_replace(",", "",$proval),2) ;
$mycart[$key][$proname] = $val[$proname] ;
}
}

//计算每件商品的金额
$mycart[$key]["cost"] = round($val["count"]*$val["price"], 2) ;
//得到所有商品的金额
$totalcost += $mycart[$key]["cost"] ;
}
$this->totalcost = $totalcost ;
$this->mycart = $mycart ;
$_session["mycart"] = $mycart ;

}
 
}
 
/**
* 格式化数字为货币数据
*
*
**/
function formatnum($data)
{
foreach($data as $key=>$val)
{
foreach($val as $sname=>$svalue)
{
if($sname !="name")
{
$data[$key][$sname] = number_format($svalue, 2) ;
}
}
}
return $data ;

}
//**************以下为接口函数
 
//*** 加一件商品
// 判断是否蓝中已有,如有,加count,否则加一个新商品
//首先都是改session的值,然后再调用update() and calculate()来更新成员变量
function addone($id,$na,$pr)
{
session_start(); //初始化一个session
$mycart = $_session["mycart"] ;
//设置购物车中的数量
$mycart[$id]["name"] = $na ;
$mycart[$id]["price"] = $pr ;
++$mycart[$id]["count"] ;
$_session["mycart"] = $mycart ;
//更新一下类的成员数据
$this->update();

}
/**
* 向购物车中添加一组商品,如果没有,进行添加,如果已经存在,则更新为data
* @param $data - 要添加的商品,格式为:
*  $data[0][id],  $data[0][name],
*  $data[0][price],$data[0][count]
* @return boolean
*/
function adddata($data)
{
if(count($data > 0))
{
session_start(); //初始化一个session
$mycart = $_session["mycart"] ;
foreach($data as $val)
{
extract($val) ;
//设置购物车中的数量
$mycart[$id]["name"] = $name ;
$mycart[$id]["price"] = $price ;
$mycart[$id]["count"] = $count ;
}
$_session["mycart"] = $mycart ;
//更新一下类的成员数据
$this->update();
}
}
/*
* 更改一件商品的单价
*
*
*
**/
function updateprice($id, $price)
{
if($price <=0) return false ;
session_start(); //初始化一个session
$mycart = $_session["mycart"] ;
if($mycart[$id]==true)
{
$mycart[$id]["price"]=$price;

 $_session["mycart"] = $mycart ;
$this->update();
}
}
//将一件商品的数量减1
function removeone($id)
{
$count = $this->mycart[$id]["count"] ;
if($count>0)
{
$this->modifycount($id, --$count) ;
}
 
}
 
//改变商品的个数,如果传入单价,则一起更改单价
function modifycount($id, $ncount, $price=0)
{
if($ncount <= 0) return false ;
session_start(); //初始化一个session
$mycart = $_session["mycart"] ;
if($mycart[$id]==true)
{
$mycart[$id]["count"]=$ncount;
//如果有传入单价,则一起更改单价
if($price >0 ) $mycart[$id]["price"]=$price;

 $_session["mycart"] = $mycart ;
$this->update();
}
 
}
 
//清空一种商品
function emptyone($i)
{
session_start(); //初始化一个session
$mycart = $_session["mycart"] ;
unset($mycart[$i]) ;
if(count($mycart)==0)
{
$this->emptyall() ;
}else{
$_session["mycart"] = $mycart ;  
$this->update();
}
}
 
 
/***************************
清空所有的商品
 
因为在win里php不支持session_destroy()函数,所以这个清空函数不完善,
只是把每种商品的个数置为0。
如果是在linux下,可以直接用session_destroy()来做。
*****************************/
function emptyall()
{
 session_start(); //初始化一个session
$mycart = $_session["mycart"] ;

unset($mycart) ;
$_session["mycart"] = $mycart ;  
$this->update();
 
}
 
/**
* 返回所有购物车中的数据
*
**/
function getdata()
{
if($this->sortcount > 0)
{
return $this->mycart ;
}else{
return array() ;
}
}
//取一件商品的信息,主要的工作函数
//返回一个关联数组,下标分别对应 id,name,price,count,cost
function getone($i){
$data = $this->mycart[$i] ;
if(false==$data) return array() ;

$data["id"] = $i ;
return $data ;

}
 
//取总的商品种类数
function getsortcount(){
return $this->sortcount;
}
 
//取总的商品价值
function gettotalcost(){
return $this->totalcost;
}
 
//end class
}

?> 

 本文Tagssession  
 收藏本文  打印本文  论坛讨论  关闭窗口
· 上一篇:列出所有购物车中的清单的程序
· 下一篇:读写串行口数据
· 通过ODBC连接的SQL SERVER实例
· apache2.0.39 php4.2.3在windowsXP下模块方式搭建
· php实现首页自动选择语言转跳
· 变量的变量,PHP和你
· URL 处理函数库


关于本站 | 联系我们 | 业务合作 | 客户案例 | 诚聘英才 | 广告合作 | 收藏本站
海口动网先锋网络科技有限公司版权所有
Copyright © 2000 - 2006 Cndw.Com
中华人民共和国电信与信息服务业务经营许可证编号 琼 ICP 020077