每日持续签到,累计签到,送积分
最新推荐文章于 2025-10-01 21:23:06 发布
原创
最新推荐文章于 2025-10-01 21:23:06 发布
·
2.3w 阅读
·
3
·
32
·
CC 4.0 BY-SA版权
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
php
专栏收录该内容
26 篇文章
订阅专栏
本文介绍了一个基于PHP的用户签到积分系统的设计与实现,包括累计签到、每日签到及积分领取等功能。通过具体代码示例展示了如何处理用户签到状态、积分更新以及特殊奖励发放等操作。
一,功能要求 如图:
二,数据表字段:
三,相关代码如下:
//签到页面(累计签到)
public function signedCount(Request $request){
$user_id = (int)$this->user_data['user_id']; //当前登录者user_id;
$sign_msg = Db::name('users')->where(['user_id'=>$user_id])->field('pay_points,rignin_time,rignin_count,continue_day,sign_get_points')->find();
$sign_get_points = $sign_msg['sign_get_points'];
$sign_msg['sign_get_points'] = explode(',',$sign_get_points); //字符串 转 数组
Response::create(['data' =>$sign_msg, 'code' => 2000, 'message' => '获取成功'], 'json')->header($this->header)->send();
}
//点击领取累计积分
public function getPoints(Request $request){
//获取2,3,7,10,15,25
$user_id = (int)$this->user_data['user_id']; //当前登录者user_id;
$get_day = $request->param('sign_get_points'); //当被领取时,即时加入数据表
$sign_day = array(2,3,7,10,15,25);
$sign_msg = Db::name('users')->where(['user_id'=>$user_id])->field('sign_get_points')->find();
$get_points = $sign_msg['sign_get_points'];
if($get_points == 0){
$sign_get_points = $get_day;
}else{
$get_pointsss = explode(',',$get_points); //转数组
if(in_array($get_day,$get_pointsss)){
Response::create(['code' => 2001, 'message' => '已被领取!'], 'json')->header($this->header)->send();
}
$sign_get_points = $sign_msg['sign_get_points'].','.$get_day;
}
Db::name('users')->where(['user_id'=>$user_id])->update(['sign_get_points'=>$sign_get_points]);
Response::create(['code' => 2000, 'message' => '领取成功'], 'json')->header($this->header)->send();
}
//每日签到(送积分)
public function signed(Request $request){
$user_id = (int)$this->user_data['user_id']; //当前登录者user_id;
$result = Db::name('users')->where(['user_id'=>$user_id])->field('continue_day,rignin_time,pay_points,rignin_count')->find();
$continue_day = $result['continue_day']; //持续签到天数
$last_sigin_time = $result['rignin_time']; //最后签到时间戳
$pay_points = $result['pay_points']; //当前登陆者积分数
$rignin_count = $result['rignin_count']; //累计签到
$sigin_time = mktime(0,0,0,date('m'),date('d')+1,date('Y')); //签到时间(当日凌晨)
//判断当日是否已签到
if(time()>$last_sigin_time){
$time = time() - $last_sigin_time; //时间差
if ($time > 24*60*60 ) { // 断签 (第一天)
Db::name('users')->where(['user_id'=>$user_id])->update(['continue_day'=>1,'rignin_time'=>$sigin_time,'pay_points'=>$pay_points+1,'rignin_count'=>$rignin_count+1]);
}else if($time < 24*60*60 && $continue_day==1){ //(第二天)
Db::name('users')->where(['user_id'=>$user_id])->update(['continue_day'=>2,'rignin_time'=>$sigin_time,'pay_points'=>$pay_points+2,'rignin_count'=>$rignin_count+1]);
}else if($time < 24*60*60 && $continue_day==2){ //(第三天)
Db::name('users')->where(['user_id'=>$user_id])->update(['continue_day'=>3,'rignin_time'=>$sigin_time,'pay_points'=>$pay_points+4,'rignin_count'=>$rignin_count+1]);
}else if($time < 24*60*60 && $continue_day==3){ //(第四天)
Db::name('users')->where(['user_id'=>$user_id])->update(['continue_day'=>4,'rignin_time'=>$sigin_time,'pay_points'=>$pay_points+8,'rignin_count'=>$rignin_count+1]);
}else if($time < 24*60*60 && $continue_day==4){ //(第五天)
Db::name('users')->where(['user_id'=>$user_id])->update(['continue_day'=>5,'rignin_time'=>$sigin_time,'pay_points'=>$pay_points+10,'rignin_count'=>$rignin_count+1]);
}else{ //(第五天以上)
Db::name('users')->where(['user_id'=>$user_id])->update(['continue_day'=>$continue_day+1,'rignin_time'=>$sigin_time,'pay_points'=>$pay_points+10,'rignin_count'=>$rignin_count+1]); //超过5天 连续加积分5
}
Response::create(['code' => 2000, 'message' => '今日签到成功!'], 'json')->header($this->header)->send();
}else{
Response::create(['code' => 2000, 'message' => '当日已签到!'], 'json')->header($this->header)->send();
}
}
从替补席到射手榜 15岁泉州籍足球小将踢进西甲
巴西1970世界杯决赛英雄情况一览