请选择 进入手机版 | 继续访问电脑版

[discuz教程] 修改Discuz积分可以一直为负的问题

发表于 2019-4-2 12:50:15 mobankoudai 用户等级--管理员
找到source\class\table\table_common_member_count.php文件,里面有个increase函数,这个是最底层的修改积分的方法,其实都是一些数据信息的修改,我们常用的updatemembercount函数最后也是调用increase函数。

修改前的函数代码:

public function increase($uids, $creditarr) {
        $uids = dintval((array)$uids, true);
        $sql = array();
        $allowkey = array('extcredits1', 'extcredits2', 'extcredits3', 'extcredits4', 'extcredits5', 'extcredits6', 'extcredits7', 'extcredits8',
                        'friends', 'posts', 'threads', 'oltime', 'digestposts', 'doings', 'blogs', 'albums', 'sharings', 'attachsize', 'views',
                        'todayattachs', 'todayattachsize', 'follower', 'following', 'newfollower', 'feeds', 'blacklist');
        foreach($creditarr as $key => $value) {
            if(($value = intval($value)) && $value && in_array($key, $allowkey)) {
                $sql[] = "`$key`=`$key`+'$value'";
            }
        }
        if(!empty($sql)){
            DB::query("UPDATE ".DB::table($this->_table)." SET ".implode(',', $sql)." WHERE uid IN (".dimplode($uids).")", 'UNBUFFERED');
            $this->increase_cache($uids, $creditarr);
        }
    }


修改后的函数代码:

public function increase($uids, $creditarr) {
        $uids = dintval((array)$uids, true);
        $sql = array();
        $allowkey = array('extcredits1', 'extcredits2', 'extcredits3', 'extcredits4', 'extcredits5', 'extcredits6', 'extcredits7', 'extcredits8',
                        'friends', 'posts', 'threads', 'oltime', 'digestposts', 'doings', 'blogs', 'albums', 'sharings', 'attachsize', 'views',
                        'todayattachs', 'todayattachsize', 'follower', 'following', 'newfollower', 'feeds', 'blacklist');
        foreach($creditarr as $key => $value) {
            if(($value = intval($value)) && $value && in_array($key, $allowkey)) {
                // 判断是否是积分操作,并且是减积分操作
                if($value < 0 && in_array($key, array('extcredits1', 'extcredits2', 'extcredits3', 'extcredits4', 'extcredits5', 'extcredits6', 'extcredits7', 'extcredits8'))) {
                    foreach($uids as $tmpuid) {
                        $rs = DB::result_first("select {$key} from %t where uid = %d", array('common_member_count', $tmpuid));
                        if(intval($rs) - abs($value) >= 0) { // 如果用户目前的积分减去将要扣的积分>0,则执行,否则不执行
                            $sql[] = "`$key`=`$key`+'$value'";
                        }
                    }
                } else {
                    $sql[] = "`$key`=`$key`+'$value'";
                }
                $sql[] = "`$key`=`$key`+'$value'";
            }
        }
        if(!empty($sql)){
            DB::query("UPDATE ".DB::table($this->_table)." SET ".implode(',', $sql)." WHERE uid IN (".dimplode($uids).")", 'UNBUFFERED');
            $this->increase_cache($uids, $creditarr);
        }
    }


其实就是在用户减积分的时候判断下,如果减积分后值小于0,就不减。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表
本站不提供充值,如需金币请分享资源赚,没有源码分享的多来论坛发发贴就可以升级用户组免金币了鸭!各别源码说明中写着要钱钱就别问为啥不能下了鸭~