自用thinkphp签到送积分方法,不含前台展示,只判断了今日有没有签到,如需要可自行添加
1、先附上表结构,自用的]/**2、签到实现方法及类
* 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
*/
/**自己使用的,调用的时候直接调用 sign_in()方法即可
* 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('签到失败');
}
}
验证今日是否已签到方法/**因为我的 error 和 success 方法中增加了 exit; 所以 上述代码中 直接 $this -> error('错误');下面可不用终止代码,大家在用的时候要考虑到自己的代码是否增加 exit 或 die;
* 登录导航
* 验证今日是否已签到
*/
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');
}
也写在我的博客里面了
http://www.xstnet.com/article-79.html
http://www.xstnet.com/article-79.html
自己使用没问题
0
0
本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门AI工具
相关专题
本专题系统讲解 Golang 在 gRPC 服务开发中的完整实践,涵盖 Protobuf 定义与代码生成、gRPC 服务端与客户端实现、流式 RPC(Unary/Server/Client/Bidirectional)、错误处理、拦截器、中间件以及与 HTTP/REST 的对接方案。通过实际案例,帮助学习者掌握 使用 Go 构建高性能、强类型、可扩展的 RPC 服务体系,适用于微服务与内部系统通信场景。
8
2026.01.15
公务员递补名单公布时间不固定,通常在面试前,由招录单位(如国家知识产权局、海关等)发布,依据是原入围考生放弃资格,会按笔试成绩从高到低递补,递补考生需按公告要求限时确认并提交材料,及时参加面试/体检等后续环节。要求核心是按招录单位公告及时响应、提交材料(确认书、资格复审材料)并准时参加面试。
44
2026.01.15
(一)符合拟调剂职位所要求的资格条件。 (二)公共科目笔试成绩同时达到拟调剂职位和原报考职位的合格分数线,且考试类别相同。 拟调剂职位设置了专业科目笔试条件的,专业科目笔试成绩还须同时达到合格分数线,且考试类别相同。 (三)未进入原报考职位面试人员名单。
58
2026.01.15
笔试成绩查询入口已开通,考生可登录国家公务员局中央机关及其直属机构2026年度考试录用公务员专题网站http://bm.scs.gov.cn/pp/gkweb/core/web/ui/business/examResult/written_result.html,查询笔试成绩和合格分数线,点击“笔试成绩查询”按钮,凭借身份证及准考证进行查询。
11
2026.01.15
本专题系统讲解 Java 在桌面应用开发领域的实战应用,重点围绕 JavaFX 框架,涵盖界面布局、控件使用、事件处理、FXML、样式美化(CSS)、多线程与UI响应优化,以及桌面应用的打包与发布。通过完整示例项目,帮助学习者掌握 使用 Java 构建现代化、跨平台桌面应用程序的核心能力。
65
2026.01.14
热门下载
相关下载
精品课程





