php实现签到功能

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php实现签到功能相关的知识,希望对你有一定的参考价值。

首先我在数据库里建了两张表,一个是用户的积分表,一个是签到状态表,分来用来记录用户的积分数和先到状态

技术分享技术分享

 

在用户签到状态表中我们有一个字段,last_sign_time,即上一次签到时间,每次可以签到的时候把这个时间与当前时间进行比较 如果相差为0天,则说明今天已签到(这个签到是24小时内只能签到一次,即两次签到时间要相差24小时以上).如果等于一天则今日可以签到,如果2天及其以上则说明漏签了.

通过时间戳的判断,及时更新状态表,并且当可以签到的时候则对用户积分表进行操作,即更新用户积分.

 

具体代码如下:

技术分享
  1 <?php
  2 $user_id[email protected]$_REQUEST[‘user_id‘];
  3 //功能:计算两个时间戳之间相差的日时分秒
  4 //$begin_time  开始时间戳
  5 //$end_time 结束时间戳
  6 function timediff($begin_time,$end_time)
  7 {
  8       if($begin_time < $end_time){
  9          $starttime = $begin_time;
 10          $endtime = $end_time;
 11       }else{
 12          $starttime = $end_time;
 13          $endtime = $begin_time;
 14       }
 15 
 16       //计算天数
 17       $timediff = $endtime-$starttime;
 18       $days = intval($timediff/86400);
 19       //计算小时数
 20       $remain = $timediff%86400;
 21       $hours = intval($remain/3600);
 22       //计算分钟数
 23       $remain = $remain%3600;
 24       $mins = intval($remain/60);
 25       //计算秒数
 26       $secs = $remain%60;
 27       $res = array("day" => $days,"hour" => $hours,"min" => $mins,"sec" => $secs);
 28       return $res;
 29 }
 30 
 31 
 32 function upuserscore($current_total_day){
 33 $user_id[email protected]$_REQUEST[‘user_id‘];
 34 //读取数据库配置信息的ini文件
 35     $ary=parse_ini_file(‘db.ini‘);
 36     $db_login_name=base64_decode($ary[‘db_login_name‘]);
 37     $db_login_password=base64_decode($ary[‘db_login_password‘]);
 38     $db_host=base64_decode($ary[‘db_host‘]);
 39     $db_name=base64_decode($ary[‘db_name‘]);
 40 //链接数据库
 41  $scorelink=mysqli_connect($db_host,$db_login_name,$db_login_password);
 42 
 43 mysqli_select_db($scorelink,$db_name); //选择数据库
 44 
 45 //检查积分表里是否有该用户  有的话则更新数据  没有的话则插入数据
 46 $scoreq = "SELECT * FROM user_score WHERE user_id=$user_id"; //SQL插入语句
 47         mysqli_query($scorelink,"SET NAMES utf8");
 48 
 49         $rs = mysqli_query($scorelink,$scoreq); //获取数据集
 50         if(!$rs){
 51                 exit(json_encode(array(‘status‘=>"success",‘code‘=>"1",‘error‘=>mysqli_error($scorelink))));
 52         }
 53         
 54         if(mysqli_num_rows($rs)){//该用户有数据 则更新其积分信息
 55             $total_score="";
 56              while($row = mysqli_fetch_row($rs)) {
 57             $total_score=$row[4];
 58            }
 59             $scoreusdateq = "UPDATE user_score SET user_total_score =‘98‘ WHERE user_id=$user_id;"; //更新
 60             mysqli_query($scorelink,"SET NAMES utf8");
 61             $ustaters = mysqli_query($scorelink,$scoreusdateq); //获取数据集
 62             if($ustaters ==1){
 63                     exit(json_encode(array(‘status‘=>"success",‘code‘=>"100")));
 64                 mysqli_close($scorelink);//关闭连接    
 65                 exit();
 66             }else{
 67                     exit(json_encode(array(‘status‘=>"success",‘code‘=>"1")));
 68                      mysqli_close($scorelink);//关闭连接
 69                       exit();
 70             }
 71         }else{//没有该用户数据 则插入其积分信息
 72             $scoreinsertq = "insert into user_score (user_id,user_total_score)values($user_id,10)"; //SQL插入语句
 73             mysqli_query($scorelink,"SET NAMES utf8");
 74 
 75             $rs = mysqli_query($scorelink,$scoreinsertq); //获取数据集
 76 
 77             if(!$rs){
 78                     exit(json_encode(array(‘status‘=>"success",‘code‘=>"1",‘error‘=>mysqli_error($scorelink))));
 79             }
 80             if(strpos($q,"SELECT") === false){
 81                     exit(json_encode(array(‘status‘=>"success",‘code‘=>"100")));
 82             }
 83 
 84             mysqli_close($scorelink);//关闭连接
 85 
 86         }
 87 
 88 }
 89 
 90 
 91 
 92 
 93 //读取数据库配置信息的ini文件
 94     $ary=parse_ini_file(‘db.ini‘);
 95     $db_login_name=base64_decode($ary[‘db_login_name‘]);
 96     $db_login_password=base64_decode($ary[‘db_login_password‘]);
 97     $db_host=base64_decode($ary[‘db_host‘]);
 98     $db_name=base64_decode($ary[‘db_name‘]);
 99 
100 //链接数据库
101  $link=mysqli_connect($db_host,$db_login_name,$db_login_password);
102 
103 mysqli_select_db($link,$db_name); //选择数据库
104 
105 //检查签到表里是否有该用户  有的话则更新数据  没有的话则插入数据
106 $q = "SELECT * FROM user_signin WHERE user_id=$user_id"; //SQL插入语句
107         mysqli_query($link,"SET NAMES utf8");
108 
109         $rs = mysqli_query($link,$q); //获取数据集
110         if(!$rs){
111                 exit(json_encode(array(‘status‘=>"success",‘code‘=>"1",‘error‘=>mysqli_error($link))));
112         }
113         
114         if(mysqli_num_rows($rs)){//该用户有数据 则更新其签到信息
115             $last_time="";
116             $total_day="";
117              while($row = mysqli_fetch_row($rs)) {
118             $last_time=$row[4]."<br/>";
119             $total_day=$row[5];
120         }
121             //根据上次签到时间和这次签到时间作比较判断有没有漏签和今日是否已签到
122             $current_total_day=intval($total_day)+1;
123             $current_day=time();
124             $ary = timediff($last_time,$current_day);
125         if($ary[day]==0){//今天已签到
126              exit(json_encode(array(‘status‘=>"success",‘code‘=>"5")));
127                 mysqli_close($link);//关闭连接    
128                 exit();
129         }else if($ary[day]==1){//没有漏签
130             $usdateq = "UPDATE user_signin SET last_sign_time=‘$current_day‘, total_day=‘$current_total_day‘ WHERE user_id=$user_id;"; //更新
131             mysqli_query($link,"SET NAMES utf8");
132             $ustaters = mysqli_query($link,$usdateq); //获取数据集
133             if($ustaters ==1){
134             upuserscore($current_total_day);
135                     //exit(json_encode(array(‘status‘=>"success",‘code‘=>"100")));
136                 mysqli_close($link);//关闭连接    
137                 exit();
138             }else{
139                     exit(json_encode(array(‘status‘=>"success",‘code‘=>"1")));
140                      mysqli_close($link);//关闭连接
141                   exit();
142             }
143         }else{//漏签过
144         $usdateq = "UPDATE user_signin SET last_sign_time=‘$current_day‘, total_day=1 WHERE user_id=$user_id;"; //更新
145         mysqli_query($link,"SET NAMES utf8");
146         $ustaters = mysqli_query($link,$usdateq); //获取数据集
147         if($ustaters ==1){
148             upuserscore($current_total_day);
149                 //exit(json_encode(array(‘status‘=>"success",‘code‘=>"100")));
150             mysqli_close($link);//关闭连接    
151             exit();
152         }else{
153                 exit(json_encode(array(‘status‘=>"success",‘code‘=>"1")));
154              mysqli_close($link);//关闭连接
155               exit();
156         }
157     }
158 
159     }else{//没有该用户记录则插入
160         $current_day=time();
161         $insertq = "insert into user_signin (user_id,last_sign_time,total_day)values($user_id,‘$current_day‘,1)"; //SQL插入语句
162             
163         mysqli_query($link,"SET NAMES utf8");
164         $insertrs = mysqli_query($link,$insertq); //获取数据集
165 
166         if(strpos($insertrs,"SELECT") === false){//出入数据成功
167             upuserscore(‘1‘);
168             //exit(json_encode(array(‘status‘=>"success",‘code‘=>"100")));
169 
170             }
171 
172     }
173 
174         mysqli_close($link);//关闭连接
175 
176 
177 ?>  
View Code

 

以上是关于php实现签到功能的主要内容,如果未能解决你的问题,请参考以下文章

PHP实现一个小小的签到功能,到底用MySQL还是Redis?

html PHP代码片段: - AJAX基本示例:此代码演示了使用PHP和JavaScript实现的基本AJAX功能。

PHP 签到,与时间获取

java如何实现二维码签到功能(二维码可以动态设置时效)

Vue + Sass 实现简单的换肤功能

PHP活动现场大屏幕互动系统源码 带微信上墙+3D签到投票抽奖+互动游戏+红包等功能