这次给大家带来的代码是用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]."
";

$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怎么做签到系统,PHP如何实现签到功能相关推荐

  1. 扫码签到系统html,扫码签到.html

     扫码签到 $axure.utils.getTransparentGifPath = function() { return 'resources/images/transparent.gif'; ...

  2. 【Java项目】如何设计一个用户签到系统?并且这个签到系统支持7天,14天等不同天数的连续签到功能?

    文章目录 问题 Redis的Bitmap MySQL实现 特殊实现思路 问题 这个问题是我再面试阿里的时候遇到的,他问的是: 如果我现在有一个需求,就是我要做一个用户的签到系统,这个签到系统要求做到能 ...

  3. 员工签到系统mysql_jsp+mysql 员工签到系统

    [实例简介] 这是我们的期末大作业,里面有现成的代码和数据库,大家可以去下载 [实例截图] [核心代码] 员工管理系统 └── 员工管理系统 ├── AAAAAA │   └── WebRoot │  ...

  4. 基于Android系统的人脸识别签到软件

    项目名称:   基于Android系统的人脸识别签到软件 目  录 1 项目介绍..... 1 1.1 项目背景.... 1 1.2 产品特点.... 2 1.3 可行性分析.... 2 1.3.1 ...

  5. Python毕设-【人脸签到系统】附源码/Python练手项目/Python毕业设计

    本人承诺只做技术分享,永不收费. V----------------->:专栏详情 文章目录 本人承诺只做技术分享,永不收费. V----------------->:专栏详情 一.背景 ...

  6. android签到功能模块,基于android的课堂签到系统.doc

    基于android的课堂签到系统 本科毕业论文(设计) 题 目 基于Android的课堂签到系统 学生姓名 XXX 指导教师 XX 学 院 信息科学与工程学院 专业班级 计算机科学与技术0908班 完 ...

  7. 课设:指纹签到系统-支持PC网页端查看

    设计内容 设计基于ESP8266指纹签到系统,完成指纹签到和签退功能,以ESP8266 NodeMCU为核心,与TFT液晶屏.指纹模块相结合,通过无线节点,实现成员签到和签退操作监测,并通过网络以TC ...

  8. 3.千万日活的签到系统如何设计?

    假设有个百万签到系统,记录用户签到记录,签了记录1,没签记录 0,如果我们用redis的string存储,一年就要存1000000*365个key,会占用大量的内存. 为了解决这个问题,Redis 提 ...

  9. python django签到系统

    python django签到系统 python django学生签到系统 python django签到项目 后端:python django 数据库:mysql或者sqlite3 前端:html ...

最新文章

  1. 如何利用OpenCV寻找轮廓的中心?
  2. 百度地图android wear,Android SDK | 百度地图API SDK
  3. Selenium的默认配置文件和创建自己的配置文件
  4. linux机器设置密码,Linux系统设置复杂安全的密码的办法
  5. html5手机签名,html5手写签名
  6. 【渝粤题库】广东开放大学 商务合同 形成性考核
  7. windows下mysql8.x配置远程连接
  8. Python学习笔记之类(二)
  9. python docx 合并文档 图片_使用python抓取大量简历文档内数据(word:docx;pdf;图片等)输出表格文件...
  10. vue组件化开发学习笔记-2-组件间的数据交互
  11. python3d动图_如何用Python制作3D动态航线图
  12. 【Python成长之路】卡萨帝冰箱能买吗?让数据来说话!
  13. win10 LTSC无损升级 win11专业版 记录
  14. 兜兜转转还是往前了一小步
  15. WebADI_WebADI常用代码bne_integrator_utils
  16. 数据链路层 ,数据链路层的主要功能,数据链路层的协议,数据链路层的设备。
  17. dubbo-admin的下载与安装
  18. excel怎么设置打印区域_Excel数据太多,无法完整打印在一张纸上?你这样设置即可搞定...
  19. Resources资源
  20. PVLAN 技术介绍

热门文章

  1. Git学习笔记:如何删除GitHub上的项目
  2. 一个操作系统的实现(1):分析linux下如何运行一个执行文件
  3. getopt的用法与optarg
  4. Windows中使用Python和C/C++联合开发应用程序起步
  5. caffe中solver.prototxt文件参数解释
  6. DPM(Deformable Parts Models)-----目标检测算法理解
  7. [云炬创业管理笔记]第九章为创业成败而准备测试4
  8. [云炬创业管理笔记]第三章测试1
  9. 330+ 个机器学习模型/库探索工具!Papers With Code 重磅推出!
  10. 第14课:项目实战——深度优化你的神经网络模型