文章已更新, 请查看新版
链接 https://www.xstnet.com/article-133.html
/** * 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 */
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'); }
自己使用的,不足之处还请大家不要介意哈,
转载请注明出处
本文链接:http://www.xstnet.com/article-79.html
备注:因为我的 error 和 success 方法中增加了 exit; 所以 上述代码中 直接 $this -> error('错误');下面可不用终止代码,大家在用的时候要考虑到自己的代码是否增加 exit 或 die;