登录  /  注册

php签到功能的实现

藏色散人
发布: 2020-09-12 11:02:27
原创
4477人浏览过

php签到功能的实现方法:首先在数据库里建两张表,一个是用户的积分表,一个是签到状态表;然后通过时间戳的判断,及时更新状态表;最后根据上次签到时间和这次签到时间进行比较判断有没有漏签和今日是否已签到即可。

php签到功能的实现

推荐:《PHP视频教程

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

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

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

<?php
$user_id=@$_REQUEST[&#39;user_id&#39;];
//功能:计算两个时间戳之间相差的日时分秒
//$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[&#39;user_id&#39;];
//读取数据库配置信息的ini文件
    $ary=parse_ini_file(&#39;db.ini&#39;);
    $db_login_name=base64_decode($ary[&#39;db_login_name&#39;]);
    $db_login_password=base64_decode($ary[&#39;db_login_password&#39;]);
    $db_host=base64_decode($ary[&#39;db_host&#39;]);
    $db_name=base64_decode($ary[&#39;db_name&#39;]);
//链接数据库
 $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(&#39;status&#39;=>"success",&#39;code&#39;=>"1",&#39;error&#39;=>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 =&#39;98&#39; WHERE user_id=$user_id;"; //更新
            mysqli_query($scorelink,"SET NAMES utf8");
            $ustaters = mysqli_query($scorelink,$scoreusdateq); //获取数据集
            if($ustaters ==1){
                    exit(json_encode(array(&#39;status&#39;=>"success",&#39;code&#39;=>"100")));
                mysqli_close($scorelink);//关闭连接    
                exit();
            }else{
                    exit(json_encode(array(&#39;status&#39;=>"success",&#39;code&#39;=>"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(&#39;status&#39;=>"success",&#39;code&#39;=>"1",&#39;error&#39;=>mysqli_error($scorelink))));
            }
            if(strpos($q,"SELECT") === false){
                    exit(json_encode(array(&#39;status&#39;=>"success",&#39;code&#39;=>"100")));
            }

            mysqli_close($scorelink);//关闭连接

        }

}




//读取数据库配置信息的ini文件
    $ary=parse_ini_file(&#39;db.ini&#39;);
    $db_login_name=base64_decode($ary[&#39;db_login_name&#39;]);
    $db_login_password=base64_decode($ary[&#39;db_login_password&#39;]);
    $db_host=base64_decode($ary[&#39;db_host&#39;]);
    $db_name=base64_decode($ary[&#39;db_name&#39;]);

//链接数据库
 $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(&#39;status&#39;=>"success",&#39;code&#39;=>"1",&#39;error&#39;=>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(&#39;status&#39;=>"success",&#39;code&#39;=>"5")));
                mysqli_close($link);//关闭连接    
                exit();
        }else if($ary[day]==1){//没有漏签
            $usdateq = "UPDATE user_signin SET last_sign_time=&#39;$current_day&#39;, total_day=&#39;$current_total_day&#39; 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(&#39;status&#39;=>"success",&#39;code&#39;=>"100")));
                mysqli_close($link);//关闭连接    
                exit();
            }else{
                    exit(json_encode(array(&#39;status&#39;=>"success",&#39;code&#39;=>"1")));
                     mysqli_close($link);//关闭连接
                  exit();
            }
        }else{//漏签过
        $usdateq = "UPDATE user_signin SET last_sign_time=&#39;$current_day&#39;, 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(&#39;status&#39;=>"success",&#39;code&#39;=>"100")));
            mysqli_close($link);//关闭连接    
            exit();
        }else{
                exit(json_encode(array(&#39;status&#39;=>"success",&#39;code&#39;=>"1")));
             mysqli_close($link);//关闭连接
              exit();
        }
    }

    }else{//没有该用户记录则插入
        $current_day=time();
        $insertq = "insert into user_signin (user_id,last_sign_time,total_day)values($user_id,&#39;$current_day&#39;,1)"; //SQL插入语句
            
        mysqli_query($link,"SET NAMES utf8");
        $insertrs = mysqli_query($link,$insertq); //获取数据集

        if(strpos($insertrs,"SELECT") === false){//出入数据成功
            upuserscore(&#39;1&#39;);
            //exit(json_encode(array(&#39;status&#39;=>"success",&#39;code&#39;=>"100")));

            }

    }

        mysqli_close($link);//关闭连接


?>
登录后复制

以上就是php签到功能的实现的详细内容,更多请关注php中文网其它相关文章!

智能AI问答
PHP中文网智能助手能迅速回答你的编程问题,提供实时的代码和解决方案,帮助你解决各种难题。不仅如此,它还能提供编程资源和学习指导,帮助你快速提升编程技能。无论你是初学者还是专业人士,AI智能助手都能成为你的可靠助手,助力你在编程领域取得更大的成就。
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
最新问题
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2024 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号