PHP购物车类
程序员文章站
2022-05-08 08:17:10
...
因为需求中只记录产品的类型,还有编号..比如食物,,然后什么编号,,这样子.所以没有记录产品的数量..要用的自己改进一下就行了.
1. [代码][PHP]代码
<?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); //如果已经存在的产品与要保存的相如,把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) { //标识已存在.退出循环 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); } } ?>