首页 > php教程 > php手册 > 正文

自用thinkphp签到送积分方法

php中文网
发布: 2016-10-22 00:00:28
原创
2174人浏览过

自用thinkphp签到送积分方法,不含前台展示,只判断了今日有没有签到,如需要可自行添加
1、先附上表结构,自用的]/**
 * tableName = 前缀_user_sing_in
 * id
 * uid
 * username
 * create_time int 10 签到时间
 * sign_in_year  签到,年
 * sign_in_month 签到,月
 * sign_in_day  签到,日
 * get_integral 签到获得积分数
 * sign_in_con_days  连续签到天数 default=1
 */2、签到实现方法及类 /**
 * Created by PhpStorm.
 * Author: 醉丶春风
 * Description: 本类必须登录,用户积分兑换,签到
 * Date: 2016/10/19
 * Time: 16:02
 */
namespace Home\Controller;
//use Think\Controller;
class IntegralController extends HomeController
{
   private $uid = null;
   private $where = array();
   /**
    * 构造方法
    * 自动加载uid,初始化uid条件
    */
   public function _initialize()
   {
      $this -> uid = $this -> check_login();
      $this -> where['uid'] = $this->uid;
   }
 
   /**
    * 签到获得积分方法
    */
   public function sign_in()
   {
      $get_integral = 2; //签到赠送积分
      $get_added_integral = 5; //连续签到N天额外赠送积分
      $continuous_day = 7; //连续签到多少天可领额外积分
      //**************************************************************
      $start_time = strtotime(date('Y-m-d'));//今天凌晨的时间戳
      $year = date("Y"); //今天-年
      $month = date("m"); //今天-月
      $day = date("d"); //今天-日
      //**************************************************************
      $yesterday = strtotime('-1 day'); //昨天的时间戳基数
      $yesterday_year = date('Y',$yesterday); //昨天-年
      $yesterday_month = date('m',$yesterday); //昨天-月
      $yesterday_day = date('d',$yesterday); //昨天-日
      //**************************************************************
      //先验证今天有没有签到过
      $Model = M('user_sign_in');
      $record_count = $Model -> where(array('uid'=>$this->uid,'create_time'=>array('EGT',$start_time))) -> count();
      if($record_count)
         $this -> error('今日已签到');
      //**************************************************************
      //准备好插入数据
      $data = array(
         'uid' => $this -> uid,
         'sign_in_year' => $year, //年
         'sign_in_month' => $month,//月
         'sign_in_day' => $day,//日
         'username' => $_SESSION['userInfo']['username'],
         'get_integral' => $get_integral, //默认签到获得积分
         'create_time' => time(),
      );
      $msg = "签到成功,获得{$get_integral}积分";
      //**************************************************************
      //查询昨天的签到纪录
      $where = array(
         'uid' => $this -> uid,
         'sign_in_year' => $yesterday_year,
         'sign_in_month' => $yesterday_month,
         'sign_in_day' => $yesterday_day,
      );
      $yesterday_record = $Model -> where($where) -> find();
      //有,设置连续签到天数加1,继续判断连续签到有没有达标
      if($yesterday_record){
         //设置连续签到天数加1
         $data['sign_in_con_days'] = $yesterday_record['sign_in_con_days'] +1;
         if($yesterday_record['sign_in_con_days'] >= $continuous_day){
            //已 经达到连续签到要求,加送额外积分
            $data['get_integral'] = $get_integral + $get_added_integral;
            $msg = "签到成功,获得{$get_integral}积分,连续签到{$continuous_day}天额外获得{$get_added_integral}积分";
         }
      }
      //**************************************************************
      //昨日没有签到,不进行逻辑处理,执行签到送积分,默认连续签到天数为1
      if($Model -> add($data)){
         //用户积分增加
         M('user') -> where($this->where) -> setInc('integral',$data['get_integral']);
         $this -> success($msg,U('Index/index'),3);
      }
      $this -> error('签到失败');
   }
 
}自己使用的,调用的时候直接调用 sign_in()方法即可

验证今日是否已签到方法
/**
 * 登录导航
 * 验证今日是否已签到
 */
public function login_nav(){
   $start_time = strtotime(date('Y-m-d'));//今天凌晨的时间戳
   $is_sign_in = 0;//初始化未签到
   //先验证今天有没有签到过
   $Model = M('user_sign_in');
   //签到纪录
   $sign_in_record = $Model -> where(array('uid'=>$_SESSION['userInfo']['id'],'create_time'=>array('EGT',$start_time))) -> find();
   if($sign_in_record){
      $is_sign_in = 1;
      //根据需要传入 $sign_in_record 或连续签到天数
      $this -> assign('sign_in_con_days',$sign_in_record['sign_in_con_days']);
   }
   $this -> assign('is_sign_in',$is_sign_in);
   //自用
   $this->display('Widget/login_nav');
}因为我的 error 和 success 方法中增加了 exit; 所以 上述代码中 直接 $this -> error('错误');下面可不用终止代码,大家在用的时候要考虑到自己的代码是否增加 exit 或 die;
也写在我的博客里面了
http://www.xstnet.com/article-79.html
http://www.xstnet.com/article-79.html
自己使用没问题

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号