• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    TP5框架实现签到功能的方法分析

    本文实例讲述了TP5框架实现签到功能的方法。分享给大家供大家参考,具体如下:

    基于tp5 模型的一个签到功能;

    由于存储所有的签到日期数据库会非常庞大,所以签到日期只存储近三个月的。

    具体功能:

    1、记录最近一次的签到时间

    2、每次签到都会添加15积分

    3、有连续签到的记录

    CREATE TABLE `sp_sign` (
     `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
     `times` datetime DEFAULT NULL COMMENT '最近一次签到时间',
     `userid` int(11) DEFAULT NULL COMMENT '用户id',
     `days` tinyint(6) NOT NULL DEFAULT '0' COMMENT '连续签到的天数',
     `number` decimal(10,0) NOT NULL DEFAULT '0' COMMENT '当月签到给的积分',
     `one` varchar(255) DEFAULT NULL COMMENT '当月签到的日期,用“,”隔开',
     `two` varchar(255) DEFAULT NULL COMMENT '上个月签到的日期,用“,”隔开',
     `three` varchar(255) DEFAULT NULL COMMENT '上上个月签到的日期,用“,”隔开',
     PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
    
    
    /**
       * 用户签到
       * @param array $userid 用户id
       */
      public function add($userid)
      {
          $data = Db::name('sign')->where('userid',$userid)->select();
          if(count($data) == 0) //没有该用户的签到记录
          {
            $query4 = Db::name('sign')->insert(['times'=>date('Y-m-d H:i:s'),'userid'=>$userid,'days'=>1,'number'=>'15','one'=>date('d',time())]);
            return 1;
          }
          else
          {
            //判断今天是否签到
            $todayBegin=date('Y-m-d'." 00:00:00");
            $todayEnd= date('Y-m-d'." 23:59:59");
            $isexit = Db::name('sign')->field('times')->where(['userid'=>$userid])->where('times','between',[$todayBegin,$todayEnd])->select();
            if(count($isexit) == 1)  //今日已签到
            {
              return 0;
            }
            else  //今日未签到
            {
              $times = Db::name('sign')->where('userid',$userid)->field('times')->select();
              $time = strtotime($times[0]['times']);
     
              if((time()-$time > 24*60*60))    //上次签到时间大于24小时,连续签到天数清零
              {
                $query = Db::name('sign')->where('userid',$userid)->update(['days'=>1]);
              }
              else   //上次签到时间小于24小时,连续签到次数加1
              {
                $query = Db::name('sign')->where('userid',$userid)->setInc('days');
              }
              //更新上次签到时间和签到积分
              $query1 = Db::name('sign')->where('userid',$userid)->update(['times'=>date('Y-m-d H:i:s')]);
              $query2 = Db::name('sign')->where('userid',$userid)->setInc('number', 15);
     
              $sqldate = date('m',$time);  //上次签到日期的月份
              $nowdate = date('m',time()); //当前月份
              //记录本次签到日期
              if($sqldate != $nowdate) //上次签到日期与本次签到日期月份不一样
              {
                $oldtime = $times[0]['times'];
                $onetime=date("Y-m-d H:i:s", strtotime("-1 month")); //获取前1个月的时间,获取格式为2016-12-30 13:26:13
                $twotime=date("Y-m-d H:i:s", strtotime("-2 month")); //获取前2个月的时间
                $threetime=date("Y-m-d H:i:s", strtotime("-3 month")); //获取前3个月的时间
     
                $rs = Db::name('sign')->where('userid',$userid)->field('one,two,three')->select();
     
                if($oldtime  $onetime  $oldtime >= $twotime)   //月份间隔 大于1个月,小于2个月
                {
                  $one = date('d',time());
                  $two = $rs[0]['one'];
                  $three = $rs[0]['two'];
                }
                elseif($oldtime  $twotime  $oldtime >= $threetime) //月份间隔 大于2个月,小于3个月
                {
                  $one = date('d',time());
                  $two = '';
                  $three = $rs[0]['one'];
                }
                elseif($oldtime  $threetime) //月份间隔 大于3个月
                {
                  $one = date('d',time());
                  $two = '';
                  $three = '';
                }
                $query3 = Db::name('sign')->where('userid',$userid)->update(['one'=>$one,'two'=>$two,'three'=>$three]);
              }
              else //上次签到日期与本次签到日期月份一样
              {
                $one = Db::name('sign')->where('userid',$userid)->field('one')->select();
                $arr[] = $one[0]['one'];
                $arr[] = date('d',time());
                $newones = implode(",",$arr);
                $query3 = Db::name('sign')->where('userid',$userid)->update(['one'=>$newones]);
              }
            return 1;
            }
          }
      }
    
    

    更多关于thinkPHP相关内容感兴趣的读者可查看本站专题:《ThinkPHP入门教程》、《thinkPHP模板操作技巧总结》、《ThinkPHP常用方法总结》、《codeigniter入门教程》、《CI(CodeIgniter)框架进阶教程》、《Zend FrameWork框架入门教程》及《PHP模板技术总结》。

    希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

    您可能感兴趣的文章:
    • thinkPHP实现签到功能的方法
    • tp5(thinkPHP5)框架数据库Db增删改查常见操作总结
    • tp5(thinkPHP5)框架实现多数据库查询的方法
    • thinkPHP5实现数据库添加内容的方法
    • tp5(thinkPHP5)框架连接数据库的方法示例
    • thinkPHP5框架数据库连贯操作之cache()用法分析
    • thinkPHP5框架实现多数据库连接,跨数据连接查询操作示例
    • Thinkphp5框架实现获取数据库数据到视图的方法
    • ThinkPHP5.1框架数据库链接和增删改查操作示例
    • PHP利用pdo_odbc实现连接数据库示例【基于ThinkPHP5.1搭建的项目】
    • 基于ThinkPHP5框架使用QueryList爬取并存入mysql数据库操作示例
    • ThinkPHP5.0框架实现切换数据库的方法分析
    上一篇:TP5框架页面跳转样式操作示例
    下一篇:TP5框架model常见操作示例小结【增删改查、聚合、时间戳、软删除等】
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    TP5框架实现签到功能的方法分析 TP5,框架,实现,签到,功能,