ecshop购物车重登陆不丢失数据

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'“ );


    //此处省略部分代码
}
所以此时退出购物车就被清空了

解决方法:
1.cls_session.php
function destroy_session()
{
    //此处省略部分代码


    $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()
{
    //些处省略函数原来代码,直接跳到函数最后,加上如下代码:


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


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


    $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);
        }
    }
}
privilege.php中发现一个clear_cart()用于清理cart中无效的数据的
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='' ";
    $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);    
        }    
    }
}



  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值