• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

php实现签到功能的方法实例分析详解

php 搞代码 4年前 (2022-01-21) 19次浏览 已收录 0个评论

这篇文章主要介绍了php实现签到功能的方法,结合实例形式分析了php基于数据库及时间判断操作实现签到功能的相关技巧,需要的朋友可以参考下

本文实例讲述了php实现签到功能的方法。分享给大家供大家参考,具体如下:

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

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

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

具体代码如下:

<?php$user_id=@$_REQUEST['user_id'];//功能:计算两个时间戳之间相差的日时分秒//$begin_time 开始时间戳//$end_time 结束时间戳function timediff($begin_time,$end_time){   if($begin_time < $end_time){     $starttime = $begin_time;     $endtime = $end_time;   }else{     $starttime = $end_time;     $endtime = $begin_time;   }   //计算天数   $timediff = $endtime-$starttime;   $days = intval($timediff/86400);   //计算小时数   $remain = $timediff%86400;   $hours = intval($remain/3600);   //计算分钟数   $remain = $remain%3600;   $mins = intval($remain/60);   //计算秒数   $secs = $remain%60;   $res = array("day" => $days,"hour" => $hours,"min" => $mins,"sec" => $secs);   return $res;}function upuserscore($current_total_day){$user_id=@$_REQUEST['user_id'];//读取数据库配置信息的ini文件  $ary=parse_ini_file('db.ini');  $db_login_name=base64_decode($ary['db_login_name']);  $db_login_password=base64_decode($ary['db_login_password']);  $db_host=base64_decode($ary['db_host']);  $db_name=base64_decode($ary['db_name']);//链接数据库 $scorelink=mysqli_connect($db_host,$db_login_name,$db_login_password);mysqli_select_db($scorelink,$db_name); //选择数据库//检查积分表里是否有该用户 有的话则更新数据 没有的话则插入数据$scoreq = "SELECT * FROM user_score WHERE user_id=$user_id"; //SQL插入语句    mysqli_query($scorelink,"SET NAMES utf8");    $rs = mysqli_query($scorelink,$scoreq); //获取数据集    if(!$rs){        exit(json_encode(array('status'=>"success",'code'=>"1",'error'=>mysqli_error($scorelink))));    }    if(mysqli_num_rows($rs)){//该用户有数据 则更新其积分信息      $total_score="";       while($row = mysqli_fetch_row($rs)) {      $total_score=$row[4];      }      $scoreusdateq = "UPDATE user_score SET user_total_score ='98' WHERE user_id=$user_id;"; //更新      mysqli_query($scorelink,"SET NAMES utf8");      $ustaters = mysqli_query($scorelink,$scoreusdateq); //获取数据集      if($ustaters ==1){          exit(json_encode(array('status'=>"success",'code'=>"100")));        mysqli_close($scorelink);//关闭连接          exit();      }else{          exit(json_encode(array('status'=>"success",'code'=>"1")));           mysqli_close($scorelink);//关闭连接           exit();      }    }else{//没有该用户数据 则插入其积分信息      $scoreinsertq = "insert into user_score (user_id,user_total_score)values($user_id,10)"; //SQL插入语句      mysqli_query($scorelink,"SET NAMES utf8");      $rs = mysqli_query($scorelink,$scoreinsertq); //获取数据集      if(!$rs){          exit(json_encode(array('status'=>"success",'code'=>"1",'error'=>mysqli_error($scorelink))));      }      if(strpos($q,"SELECT") === false){          exit(json_encode(array('status'=>"success",'code'=>"100")));      }      mysqli_close($scorelink);//关闭连接    }}//读取数据库配置信息的ini文件  $ary=parse_ini_file('db.ini');  $db_login_name=base64_decode($ary['db_login_name']);  $db_login_password=base64_decode($ary['db_login_password']);  $db_host=base64_decode($ary['db_host']);  $db_name=base64_decode($ary['db_name']);//链接数据库 $link=mysqli_connect($db_host,$db_login_name,$db_login_password);mysqli_select_db($link,$db_name); //选择数据库//检查签到表里是否有该用户 有的话则更新数据 没有的话则插入数据$q = "SELECT * FROM user_signin WHERE user_id=$user_id"; //SQL插入语句    mysqli_query($link,"SET NAMES utf8");    $rs = mysqli_query($link,$q); //获取数据集    if(!$rs){        exit(json_encode(array('status'=>"success",'code'=>"1",'error'=>mysqli_error($link))));    }    if(mysqli_num_rows($rs)){//该用户有数据 则更新其签到信息      $last_time="";      $total_day="";       while($row = mysqli_fetch_row($rs)) {      $last_time=$row[4]."<br/>";      $total_day=$row[5];    }      //根据上次签到时间和这次签到时间作比较判断有没有漏签和今日是否已签到      $current_total_day=intval($total_day)+1;      $current_day=time();      $ary = timediff($last_time,$current_day);    if($ary[day]==0){//今天已签到       exit(json_encode(array('status'=>"success",'code'=>"5")));        mysqli_close($link);//关闭连接          exit();    }else if($ary[day]==1){//没有漏签      $usdateq = "UPDATE user_signin SET last_sign_time='$current_day', total_day='$current_total_day' WHERE user_id=$user_id;"; //更新      mysqli_query($link,"SET NAMES utf8");      $ustaters = mysqli_query($link,$usdateq); //获取数据集      if($ustaters ==1){      upuserscore($current_total_day);          //exit(json_encode(array('status'=>"success",'code'=>"100")));        mysqli_close($link);//关闭连接          exit();      }else{          exit(json_encode(array('status'=>"success",'code'=>"1")));           mysqli_close($link);//关闭连接         exit();      }    }else{//漏签过    $usdateq = "UPDATE user_signin SET last_sign_time='$current_day', total_day=1 WHERE user_id=$user_id;"; //更新    mysqli_query($link,"SET NAMES utf8");    $ustaters = mysqli_query($link,$usdateq); //获取数据集    if($ustaters ==1){      upuserscore($current_total_day);        //exit(json_encode(array('status'=>"success",'code'=>"100")));      mysqli_close($link);//关闭连接        exit();    }else{        exit(json_encode(array('status'=>"success",'code'=>"1")));       mysqli_close($link);//关闭连接       exit();    }  }  }else{//没有该用户记录则插入    $current_day=time();    $in<strong style="color:transparent">本文来源gao@daima#com搞(%代@#码@网&</strong><strong>搞gaodaima代码</strong>sertq = "insert into user_signin (user_id,last_sign_time,total_day)values($user_id,'$current_day',1)"; //SQL插入语句    mysqli_query($link,"SET NAMES utf8");    $insertrs = mysqli_query($link,$insertq); //获取数据集    if(strpos($insertrs,"SELECT") === false){//出入数据成功      upuserscore('1');      //exit(json_encode(array('status'=>"success",'code'=>"100")));      }  }  mysqli_close($link);//关闭连接?>

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:php实现签到功能的方法实例分析详解
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址