分享好友 教程首页 教程搜索 频道列表

php设计 点击签到,补签,补签卡设计,签到获取连签天数,连签获取奖励

2022-07-24 19:178070
+关注2
核心提示:请用代码测试

PHP

    public function sign__log(){
        $user = $this->auth->getUser();
        $time = $this->request->param('time');
        $year = date('Y',time());
        $month = date('m',time());
        $day = date('d',time());
        $days = date("t"); 
        $where = [
            'year' => $year,
            'month' => $month,
            'day' => $time,
        ];
        $is_sgin = Db::name('sign_log')->where($where)->find();
        if($is_sgin){
            $this->error('已经签过到了');
        }
        
        $sign_log = [
            'user_id' => $user['id'],
            'year' => $year,
            'month' => $month,
            'day' => $time,
            'createtime' => time(),
        ];
        if($time <= $day){
            if($time < $day){
                // 是否有补签卡
                if($user['signature_num'] <= 0){
                    $this->error('抱歉,您暂时没有可用的补签次数');
                }
                // 减去补签卡次数
                Db::name('user')->where('id',$user['id'])->setDec('signature_num');

                // 是补签
                $sign_log['is_repair'] = 1;
                $memo = '补签获得';
            }else{
                $sign_log['is_repair'] = 0;
                $memo = '签到获得';
            }

            // 签到 sign_log
           
            Db::name('sign_log')->insert($sign_log);
            $i = $this->exticle();
            // 签到送积分
            //根据$i是连续签到的第几天进行分发奖励
            $give_score = 获得的积分数量; 
            // 存入积分表,加上积分
            $saveuser['score'] = $user['score'] + $give_score;
            $user_score_log = [
                'user_id' => $user['id'],
                'score' => $give_score,
                'before' => $user['score'],
                'after' => $user['score'] + $give_score,
                'memo' => $memo,
                'createtime' => time(),
            ];
            Db::name('user_score_log')->insert($user_score_log);
            //存入
            $saveuser['count_sign'] = $user['count_sign'] + 1;
            if($user['continuity_sign'] != $i){
                $saveuser['continuity_sign'] = $i;
            }
            Db::name('user')->where('id',$user['id'])->update($saveuser);
            if($time < $day){
                $this->success('恭喜您,补签成功!',$i);
            }else{
                $this->success('恭喜您,签到成功!',$i);
            }
        }else{
            $this->error('还没有到日期哦');
        }
        
    }
    //获取连签的天数
    public function exticle(){
        $user = $this->auth->getUser();
        $year = date('Y',time());
        $month = date('m',time());
        // $month = 5;
        $day = date('d',time());
        // $day = 31;
        $thismonth = Db::name('sign_log')->field('day')->where(array('user_id'=>$user['id'],'year'=>$year,'month'=>$month))->order('day DESC')->select();
        foreach($thismonth as $v){
            $touch[] = $v['day'];
        }
        // var_dump($touch);exit;
        if(count($thismonth) != 0){
            if(count($touch) > 2){
                if(in_array($day,$touch) || in_array($day-1,$touch)){
                    // 今天 
                    for ($x=0; $x<count($touch)-1; $x++) {
                        if($touch[$x] - $touch[$x+1] > 1){
                            $i = $x + 1;
                        }
                    } 
                    if(!isset($i)){
                        $i = count($touch);
                    }
                }else{
                    //今天昨天都没有,连签变为0
                    $i = 0;
                }
            }else{
                if(count($touch) == 1){
                    if($touch[0] == $day || $touch[0] == $day-1){
                        $i = 1;
                    }else{
                        $i = 0;
                    }
                }else if(count($touch) == 2){
                    if($touch[0] == $day || $touch[0] == $day-1){
                        if($touch[0] - $touch[1] == 1){
                            $i = 2;
                        }else{
                            $i = 1;
                        }
                    }else{
                        $i = 0;
                    }
                }
            }
        }else{
            $i = 0;
        }
        return $i;
    }


MYSQL表设计

本文标签: #签到 #补签 #每日 #连签 #断签
整理员:网络转载
免责声明:凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。
生成海报
您可能在找更多

PHP+MYSQL+AJAX实现每日签到功能

    用代码测试

网络转载 PHP2022-07-03

PHP连续签到功能实现方法详解

    本文实例讲述了PHP连续签到功能实现方法。分享给大家供大家参考,具体如下:PHP代码:?phprequire./global.php;$act=isset($_GET['act'])?$_GET['act']:error;//d($act);switch($act){caseqiandao:$

网络转载 web前端开发 12022-01-06

php实现签到功能的方法实例分析

    本文实例讲述了php实现签到功能的方法。分享给大家供大家参考,具体如下:首先我在数据库里建了两张表,一个是用户的积分表,一个是签到状态表,分来用来记录用户的积分数和先到状态在用户签到状态表中我们有一个字段,last_sign_time,即上一次签到时间,每次可以签到的时候把这个时间与当前时间进行比较 如果相差为0天,则说明今天已签到(这个签到是24小时内只能签到一次,即两次签到时间要相差24小时以上).如果等于一天则今日可以签到,如果2天及其以上则说明漏签了.通过时间戳的判断,及时更新状态表,并且当可以签

小黑 PHP2018-09-23

下一篇
我来说两句
抢沙发