PHP购物车类:
因为需求中只记录产品的类型,还有编号..比如食物,,然后什么编号,,这样子.所以没有记录产品的数量..要用的自己改进一下就行了.
//setcookie("cart","s:26,45,4,4523423|d:17,7,27,26|e:12,13,123,43|f:34");
//cartAdd('e','167');
//getProInfo('z');
//delProInfo('f','26');
/**
* ***********
* 用于记录,修改,删除COOKIE的类,用于我的计划的本地信息的更改
* LIQUAN
*/
class cart
{
/*
实现COOKIES购物车
@type 产品类型
@id 产品编号
COOKIES的结果为 type1:3,45,23|type2:34,234,34|type3:344,124
*/
function cartAdd(type,id)
{
//如果第一次使用,则重新设置COOKIES
if(!isset(_COOKIE["cart"]))
{
setcookie("cart",type.":".id);
}
else
{
//如果不是第一次,则先取出来
cartStr=_COOKIE["cart"];
//把结果分开
cartarray=split("\|",cartStr);
//用于判断类型是否存在,初始不存在,为零
istype=0;
//产品编号列表
id_list;
//循环产品
for (i=0;i
{
//获取产品名和产品编号列表
list(carttype,product)=split(":",cartarray[i]);
//如果已经存在的产品与要保存的相如,把isType改为1,说明产品已经存在
if (type==carttype)
{
istype=1;
//获取产品的编号列表
id_list=product;
//中断循环
break ;
}
}
//如果产品不存在
if(istype==0)
{
//往COOKIES里面加入新产品和产品的编吃
cartStr=cartStr."|".type.":".id;
}
else
{
//把产品列表分开成数组
id_list=split("\,",id_list);
//标识产口编号是否存在,初始不存在
isId=0;
//循环产品编号
for(i=0;i
{
//如果要保存的产品编号已尼存在
if(id==id_list[i])
{
//标识已存在.退出循环
isId=1;
break;
}
}
//这里只做产品类型和产品编号,所以相同的不加数量,直接不外理
//如果相关类型的产品编号不存在,则加上新的编号
if(isId!=1)
{
cartStr=str_replace(type.":",type.":".id.",",cartStr);
//cartStr=str_replace('d:','d:2,',cartStr);
}
}
setcookie("cart",cartStr);
print_r(_COOKIE["cart"]);
//setcookie("cart","",time()-100);
}
return ;
}
//返回相应的产品列表
/*
@type产品类型
*/
function getProInfo(type)
{
//获取购物车COOKIES
cartStr=_COOKIE["cart"];
//匹配COOKIES字符,获取产品列表
preg_str=type.":((\d+),)*(\d+)";
//echo "
";
preg_match("/".preg_str."/",cartStr,proStr);
//echo proStr[0];
//exit();
list(protype,product)=split(":",proStr[0]);
return product;
//pro_list=split(",",product);
//返回产品列表
//return pro_list;
// print_r(pro_list);
}
/*
*删除产品
*@type产品类型名
*@id 产品编号
*/
function delProInfo(type,id)
{
//获取购物车COOKIES
cartStr=_COOKIE["cart"];
//匹配COOKIES字符,获取产品列表
preg_str=type.":((\d+),)*(\d+)";
//echo "
";
preg_match("/".preg_str."/i",cartStr,proStr);
//只有能找到要删除的类型,才进行下面操做
if(proStr)
{
//查询删除的类型里面是否有要删除的ID
isproId=strstr(proStr[0],id);
//如果有,才进行下面操作
if(isproId)
{
//更新后的产品字符串
upproStr;
//更新后的所有最新的产品COOKIES字符
newCartStr;
//查询要删除的产品是否有多个
preg_match("/,/",proStr[0],isend);
//如果有,进行下面操作
if(isend)
{
//查询要删除的产品后面是否还有产品
preg_match("/".id.",/",proStr[0],isdot);
//如果有,删除后面的逗号
if(isdot)
{
upproStr=str_replace(id.",","",proStr[0]);
}
//如果没有,删除前面的逗号
else
{
upproStr=str_replace(",".id,"",proStr[0]);
}
//更新要插入COOKIES里面的字符串
newCartStr=str_replace(proStr[0],upproStr,cartStr);
}
//如果没有多个,则直接删除该类产品
else
{
//判断该类产品后面还有没有产品
preg_match("/".proStr[0]."\|/",cartStr,issu);
//如果有,则删除后面的分格符
if(issu)
{
newCartStr=str_replace(proStr[0]."|","",cartStr);
}
//如果没有,则删除前面的分格符
else
{
newCartStr=str_replace("|".proStr[0],"",cartStr);
}
}
setcookie("cart",newCartStr);
}
}
}
function deletecart()
{
setcookie("cart","",time()-100);
}
}
?>