这篇文章主要介绍了php实现签到功能的方法,结合实例形式分析了php基于数据库及时间判断操作实现签到功能的相关技巧,需要的朋友可以参考下
本文实例讲述了php实现签到功能的方法。分享给大家供大家参考,具体如下:
首先我在数据库里建了两张表,一个是用户的积分表,一个是签到状态表,分来用来记录用户的积分数和先到状态
<?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();
$insertq = "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);//关闭连接
?>
更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP+MySQL会员系统开发专题》、《php+mysql数据库操作入门教程》、《php+mysqli数据库程序设计技巧总结》、《php面向对象程序设计入门教程》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。
沃梦达教程
本文标题为:php实现签到功能的方法实例分析
猜你喜欢
- PHP简单实现二维数组的矩阵转置操作示例 2022-10-02
- 用nohup命令实现PHP的多进程 2023-09-02
- windows下9款一键快速搭建PHP本地运行环境的好工具(含php7.0环境) 2023-09-02
- php微信公众号开发之秒杀 2022-11-23
- laravel通用化的CURD的实现 2023-03-17
- laravel实现按月或天或小时统计mysql数据的方法 2023-02-22
- PHP实现微信支付(jsapi支付)流程步骤详解 2022-10-09
- PHP仿tp实现mvc框架基本设计思路与实现方法分析 2022-10-18
- Laravel balde模板文件中判断数据为空方法 2023-08-30
- PHP中PDO事务处理操作示例 2022-10-15