zoukankan      html  css  js  c++  java
  • 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<count($cartarray);$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<count($id_list);$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 "<br>";
    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 "<br>";
    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);
    }
    }
    ?>

  • 相关阅读:
    BitmapDrawable
    Understanding Density Independence in Android
    HttpURLConnection
    [Unity3D]事半功倍:界面插件NGUI的使用教程与实例
    lua下标
    数组形参
    Hibernate的一级缓存
    必备技术
    idea 跳转实现类-快捷键
    JavaSE面试题:单例设计模式
  • 原文地址:https://www.cnblogs.com/zerogo/p/2209193.html
Copyright © 2011-2022 走看看