Self-use thinkphp sign-in method to get points, which does not include front-end display. It only determines whether there is a sign-in today. You can add it yourself if necessary
1. Attach the table structure first, for your own use]/**<br>
* tableName = prefix_user_sing_in<br>
* id<br>
* uid<br>
* username<br>
* create_time int 10 Check-in time<br>
* sign_in_year Sign in, year<br>
* sign_in_month Sign in, month<br>
* sign_in_day Sign in, day<br>
* get_integral Number of points earned by signing in<br>
* sign_in_con_days Number of consecutive sign-in days default=1<br>
*/
2. Sign-in implementation methods and classes<?php<br />
/**<br />
* Created by PhpStorm.<br />
*Author: Drunk, Spring Breeze<br />
* Description: This category requires logging in, redeeming user points, and signing in<br />
* Date: 2016/10/19<br />
* Time: 16:02<br />
*/<br />
namespace HomeController;<br />
//use ThinkController;<br />
class IntegralController extends HomeController<br />
{<br />
Private $uid = null;<br />
private $where = array();<br />
/**<br />
*Construction method<br />
* Automatically load uid and initialize uid conditions<br />
*/<br />
Public function _initialize()<br />
{<br />
$this -> uid = $this -> check_login();<br>
$this -> where['uid'] = $this->uid;<br>
}<br>
<br>
/**<br>
*How to get points by signing in<br>
*/<br>
public function sign_in()<br>
{<br>
$get_integral = 2; //Sign in and get points for free <br>
$get_added_integral = 5; //Sign in for N consecutive days and get extra points<br>
$continuous_day = 7; //How many consecutive days can you sign in to receive extra points<br>
//************************************************ ******************<br>
$start_time = strtotime(date('Y-m-d'));//Today’s early morning timestamp<br>
$year = date("Y"); //Today-year<br>
$month = date("m"); //Today-month<br>
$day = date("d"); //Today-day<br>
//************************************************ ******************<br>
$yesterday = strtotime('-1 day'); //Yesterday’s timestamp base<br>
$yesterday_year = date('Y',$yesterday); //Yesterday-year<br>
$yesterday_month = date('m',$yesterday); //Yesterday-month<br>
$yesterday_day = date('d',$yesterday); //Yesterday-day<br>
//************************************************ ******************<br>
//Verify first whether you have checked in today<br>
$Model = M('user_sign_in');<br>
$record_count = $Model -> where(array('uid'=>$this->uid,'create_time'=>array('EGT',$start_time))) -> count();<br>
If($record_count)<br>
$this -> error('Signed in today');<br>
//************************************************ ******************<br>
//Ready to insert data<br>
$data = array(<br>
‘uid’ => $this -> uid,<br>
‘sign_in_year’ => $year, //year<br>
‘sign_in_month’ => $month,//month<br>
'sign_in_day' => $day,//Day<br> 'username' => $_SESSION['userInfo']['username'],<br>
'get_integral' => $get_integral, //By default, you will get points by signing in<br>
'create_time' => time(),<br>
);<br>
$msg = "Sign in successfully, get {$get_integral} points";<br>
//***************************************************** **********<br>
//Check yesterday’s check-in record<br>
$where = array(<br>
‘uid’ => $this -> uid,<br>
'sign_in_year' => $yesterday_year,<br>
‘sign_in_month’ => $yesterday_month,<br>
‘sign_in_day’ => $yesterday_day,<br>
);<br>
$yesterday_record = $Model -> where($where) -> find();<br>
//Yes, set the number of consecutive check-in days plus 1, and continue to judge whether the continuous check-in has reached the standard<br>
If($yesterday_record){<br>
//Set the number of consecutive check-in days plus 1<br>
$data['sign_in_con_days'] = $yesterday_record['sign_in_con_days'] +1;<br>
If($yesterday_record['sign_in_con_days'] >= $continuous_day){<br>
//Have reached the requirement of continuous sign-in, and get extra points<br>
$data['get_integral'] = $get_integral + $get_added_integral;<br>
Get {$get_integral} points, get {$get_integral} points, and sign in for {$continuous_day} days to get extra {$get_added_integral} points"; <br>
}<br>
}<br>
//************************************************ ******************<br>
// Yesterday did not sign in, did not conduct logical processing, executed the sign -in delivery points, the number of continuous sign -in days by default was 1<br>
If($Model -> add($data)){<br>
//User points increase<br>
M('user') -> where($this->where) -> setInc('integral',$data['get_integral']);<br>
$this -> success($msg,U('Index/index'),3);<br>
}<br>
$this -> error('Sign-in failed');<br>
}<br>
<br>
}
For your own use, just call the sign_in() method directly when calling
How to verify whether you have signed in today/**<br>
* Login navigation<br>
* Verify whether you have signed in today<br>
*/<br>
public function login_nav(){<br>
$start_time = strtotime(date('Y-m-d'));//Today’s early morning timestamp<br>
$is_sign_in = 0; //Initialization not signed in<br>
//Verify first whether you have checked in today<br>
$Model = M('user_sign_in');<br>
//Sign-in record<br>
$sign_in_record = $Model -> where(array('uid'=>$_SESSION['userInfo']['id'],'create_time'=>array('EGT',$start_time))) -> ;find();<br>
if($sign_in_record){<br>
$is_sign_in = 1;<br>
//Pass in $sign_in_record or the number of consecutive sign-in days as needed<br>
$this -> assign('sign_in_con_days',$sign_in_record['sign_in_con_days']);<br>}<br>
$this -> assign('is_sign_in',$is_sign_in);<br>
//For personal use<br>
$this->display('Widget/login_nav');<br>
}
Because I added exit; in my error and success methods, so in the above code, directly $this -> error('error'); There is no need to terminate the code below. When using it, everyone should consider whether their own code has increased. exit or die;
I also wrote it in my blog
http://www.xstnet.com/article-79.html
http://www.xstnet.com/article-79.html
No problem if you use it yourself