分享

ecshop购物车永久保留(原创)修复一个BUG

 大芬油画 2014-05-05

一、匿名用户的购物车和登录会员购物车

 

ecshop 的购物车机制,当用户打开网站时会在session表产生一条seesion,登陆时更新这条seession。此时如果用户将商品添加至购物车,就会在 cart表中添加以session_id为Id的商品数据。而用户退出登录时系统会调用destroy_session()函数,清购物车。函数部分如 下:(cls_session.php文件中)

 function destroy_session()

    {   .此处省略部分代码

              

            $this->db->query('DELETE FROM ' . $GLOBALS['ecs']->table('cart') . " WHERE session_id = '$this->session_id'“ );

      此处省略部分代码

所以此时退出购物车就被清空了,下面是本人的解决方法:

说说思路:

     Author:梦中的期待*/

     Author:梦中的期待*/

     Author:梦中的期待*/

Author:梦中的期待*/

具体实现代码:

1.cls_session.php

 function destroy_session()

    {   .此处省略部分代码

         Author:梦中的期待*/

            $this->db->query('DELETE FROM ' . $GLOBALS['ecs']->table('cart') . " WHERE session_id = '$this->session_id' AND user_id =''");

     此处省略部分代码}

2.lib.main.php

function update_user_info()

{  些处省略函数原来代码,直接跳到函数最后,加上如下代码:

Author:梦中的期待*/

     $sql = "update ".$GLOBALS['ecs']->table('cart')." set user_id =".$_SESSION['user_id']." where session_id = '".SESS_ID."'";

     $GLOBALS['db'] -> query($sql);

     Author:梦中的期待*/

     $sql1 = "update ".$GLOBALS['ecs']->table('cart')." set session_id ='".SESS_ID."' where user_id = '".$_SESSION['user_id']."'";

     $GLOBALS['db'] -> query($sql1);

     Author:梦中的期待*/

     $sql2="select distinct(c.goods_id) from".$GLOBALS['ecs']->table('cart')."as c left join"

     .$GLOBALS['ecs']->table('goods')."as g on c.goods_id=g.goods_id where g.is_on_sale =0 AND c.user_id = '".$_SESSION['user_id']."'";

     $data = $GLOBALS['db'] -> getAll($sql2);

    if($data){

     foreach ($data as $k=>$v){

     $sql="delete from".$GLOBALS['ecs']->table('cart')."where goods_id = '".$v['goods_id']."'";

     $GLOBALS['db'] -> query($sql);

  }}}

 

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////分隔线

补充:发现一个BUG

在privilege.php中发现一个function clear_cart()用于清理cart中无效的数据的,难怪购物车的商品,session一过期就没有了!~

既然我们不需要定期清cart中的无效数据,这个function其实就没有用了,但我们改一下,可以用来清理己下架的商品,这样上面.lib.main.php文件中的清理下架商品的部分就可以删除了!~

修改后的function如下:

 

function clear_cart()
{
   
   

    // 删除cart中无效的数据
    //$sql = "DELETE FROM " . $GLOBALS['ecs']->table('cart') .
    //  " WHERE session_id NOT " . db_create_in($valid_sess);
    // $GLOBALS['db']->query($sql);
   
 
     $sql2="select distinct(c.goods_id) from".$GLOBALS['ecs']->table('cart')."as c left join"
     .$GLOBALS['ecs']->table('goods')."as g on c.goods_id=g.goods_id where g.is_on_sale =0 AND c.extension_code='' ";
      //.$GLOBALS['ecs']->table('goods')."as g on c.goods_id=g.goods_id  ";
     $data = $GLOBALS['db'] -> getAll($sql2);
      print_r($data);
     if($data){
         foreach ($data as $k=>$v){
             $sql="delete from".$GLOBALS['ecs']->table('cart')."where goods_id = '".$v['goods_id']."'";    
             $GLOBALS['db'] -> query($sql);    
            
     }
}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章