PHP实现签到功能

                                                            PHP实现签到功能
1、表设计
    1)、主表
        CREATE TABLE `sign` (
          `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键自增',
          `uid` varchar(50) NOT NULL DEFAULT '0' COMMENT '用户ID 唯一',
          `username` varchar(50) NOT NULL DEFAULT '' COMMENT '用户名',
          `sign_count` int(11) NOT NULL DEFAULT '0' COMMENT '连续签到次数',
          `last_time` int(11) NOT NULL DEFAULT '0' COMMENT '最近一次签到时间',
          `create_time` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间',
          PRIMARY KEY (`id`)
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='签到主表';
    2)、详情表
        CREATE TABLE `sign_detail` (
          `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键自增',
          `sign_id` int(11) NOT NULL DEFAULT '0' COMMENT '签到表 wechat_sign表ID',
          `sign_time` int(11) NOT NULL DEFAULT '0' COMMENT '签到时间',
          PRIMARY KEY (`id`)
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='签到详情表';
        
2、model.php文件
    1)、主表model [ Sign.php ]
        <?php
        /**
         * @todo 签到主表
         * @author admin
         */
        class SignModel extends Model
        {
            
        }
    2)、详情表model [ SignDetail.php ]
        <?php
        /**
         * @todo 签到详情表
         * @author admin
         */
        class SignDetailModel extends Model
        {
            
        }
        
3、控制器方法  [ Test.php ]
    class TestController extends Rest{
        /**
         * @todo 签到功能
         */
        public function signAction(){
            ini_set('date.timezone','Asia/Shanghai');
            $uid = isset($_GET['uid']) ? $_GET['uid'] : '';
            $username = isset($_GET['username']) ? $_GET['username'] : '';
            if(!$uid || !$username ){
                die('参数缺失!');
            }
            $time = time();
            $mSign = new SignModel();
            $mSignDetail = new SignDetailModel();
            $signInfo = $mSign->getOne(['uid'=>$uid]);
            if($signInfo){
                $sign_id = $signInfo['id'];
                $last_time = date( 'Y-m-d', $signInfo['last_time'] );
                $sign_count = $signInfo['sign_count'];
                $yesterday = date('Y-m-d',strtotime('-1 day'));    //昨天的日期格式 2018-07-02
        
                if( $last_time == date('Y-m-d') ){    //如果等于今天,$sign_count不变
                    die('您今天已经签到过了!');
                }else if( $last_time == $yesterday ){    //如果用户昨天打了卡,连续签到次数加1;否则重置为0
                    $sign_count += 1;
                }else{
                    $sign_count = 0;
                }
        
                $where = [ 'uid'=>$uid ];
                $editData = ['sign_count'=>$sign_count, 'last_time'=>$time];
                $result = $mSign->edit($editData, $where);        //编辑详情表
            }else{    //主表数据为空,是新用户登录
                $data = [
                        'uid'=>$uid,
                        'username'=>$username,
                        'sign_count'=>1,
                        'last_time'=>$time,
                        'create_time'=>$time
                ];
                $sign_id = $mSign->add($data);
                $result = $sign_id;
            }
        
            if($result){    //获取主表的主键ID,统一操作详情变
                $detailData = [
                        'sign_id'=>$sign_id,
                        'sign_time'=>$time
                ];
                $detailRet = $mSignDetail->add($detailData);    //添加数据到详情表
                if($detailRet){
                    die('签到成功!');
                }else{
                    die('签到失败!');
                }
            }else{
                die('操作主表异常!');
            }
        }
    }

猜你喜欢

转载自blog.csdn.net/qq_36025814/article/details/80884787