• PHP实现签到功能


    1、表设计
        1)、主表
            CREATE TABLE `sign` (
              `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键自增',
              `uid` varchar(50) NOT NULL DEFAULT '0' COMMENT '用户ID 唯一',
              `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 '主键自增',
              `uid` varchar(50) NOT NULL DEFAULT '0' COMMENT '用户ID 唯一',

    `sign_time` int(11) NOT NULL DEFAULT '0' COMMENT '签到时间', PRIMARY KEY (`id`)
    ) 
    ENGINE
    =InnoDB DEFAULT CHARSET=utf8 COMMENT='签到详情表';
    //主表
                       $signinfo = Db::table('ims_ewei_shop_sign_user')->where('openid',$openid)->order('id','desc')->find();
    if($signinfo)
    {
    //连续签到的次数

    $sign_count = $signinfo['sign_count'];

    //最后签到时间
    $last_time = date('Y-m-d',$signinfo['last_time']);

    $yesterday = date('Y-m-d',strtotime('-1 day')); //昨天的日期格式 2019-12-12
    //总的签到天数
    $sum = $signinfo ['sum'];


    if($last_time == date('Y-m-d'))
    { //最后时间等于当前的时间,表示今天已经签过
    return json(['code'=>200,'msg'=>'已经签过到了!']);
    }else if( $last_time == $yesterday) //用户昨天签到,连续签到次数加1,否者重置为0
    { //最后签到到的时间等于昨天的时间 ,表示是连续签到 连续签到的次数 $sign_count 加1, 最后签到的时间不等于昨天的时间 表示不是连续签到,连续签到的字段 sign_count 重置为0

    $sign_count +=1;



    }else{

    $sign_count = 0;
    }

    $data = [


    'sign_count' => $sign_count,
    'sum' => $sum +=1,
    'last_time' => time(),
    'signdate' => time(),

    ];

    $sign_id = Db::table('ims_ewei_shop_sign_user')->where('openid',$openid)->update($data);

    if($sign_id)
    {
    //向详情表入数据
    $param =[
    'uniacid' =>4,
    'time' => time(),
    'openid' => $openid,
    'credit' => $signtime,
    'log' => '日常签到+'.$signtime,
    'type' => 0,
    'day' =>0,
    ];

    $detail = Db::table('ims_ewei_shop_sign_records')->insertGetId($param);

    if($detail){
    //更新用户总的时间表
    $membertime = Db::table('ims_mc_members_times')->where('uid',$uid)->find();
    if($membertime)
    {
    $datamember = [

    'time' => $membertime ['time'] + $signtime,
    'update_time' => time(),
    ];

    $att = Db::table('ims_mc_members_times') ->where('uid',$uid)->update($datamember);

    if($att >0)
    {
    $row = Db ::table('ims_ewei_shop_sign_records')->where('openid',$openid)->order('id','desc')->field('time,credit,log,openid')->find();

    $signdate = date('Y-m-d',$row['time']);
    $row['date'] = $signdate;

    $datas ['code'] = 200;

    $datas ['data'] = $row;



    return json($datas);
    }
    }
    }
    }

    }else{

    $data = [

    'uniacid' => 4,
    'openid' => $openid,
    'sign_count' => 1,
    'sum' => 1,
    'last_time' => time(),
    'signdate' => time(),

    ];

    $sign_id = Db::table('ims_ewei_shop_sign_user')->insertGetId($data);

    $result = $sign_id;

    if($result)
    {
    //向详情表入数据
    $param =[
    'uniacid' =>4,
    'time' => time(),
    'openid' => $openid,
    'credit' => $signtime,
    'log' => '日常签到+'.$signtime,
    'type' => 0,
    'day' =>0,
    ];

    $signDetail = Db::table('ims_ewei_shop_sign_records')->insertGetId($param);

    if($signDetail){
    //更新用户总的时间表
    $membertime = Db::table('ims_mc_members_times')->where('uid',$uid)->find();
    if($membertime)
    {
    $datamember = [

    'time' => $membertime ['time'] + $signtime,
    'update_time' => time(),
    ];

    $att = Db::table('ims_mc_members_times') ->where('uid',$uid)->update($datamember);

    if($att >0)
    {
    $res = Db ::table('ims_ewei_shop_sign_records')->where('openid',$openid)->order('id','desc')->field('time,credit,log,openid')->find();

    $signdate = date('Y-m-d',$res['time']);
    $res['date'] = $signdate;

    $data ['code'] = 200;

    $data ['data'] = $res;



    return json($data);
    }
    }
    }

    }else{

    return json(['code' => 100,'msg'=>'签到失败']);
    }
    }

        




    世界上最美的风景,是自己努力的模样
  • 相关阅读:
    JavaScript如何获取一个元素的样式信息
    Linux服务器命令行操作(小白专用)
    Linux云服务器搭建node环境
    C++ new和delete运算符简介
    C++中free()与delete的区别
    VS2017+Qt开发时打开命令调试窗口
    opencv4.2版本遇到CV_MINMAX未声明标识符
    CUDA 数据传输
    uchar 存为8位/16位图像(QImage)
    Qt Creator删除toolbar中多余的“分隔符”
  • 原文地址:https://www.cnblogs.com/xiong-hua/p/12030818.html
Copyright © 2020-2023  润新知