PHP 签到,与时间获取

本文实例讲述了php实现签到功能的方法。分享给大家供大家参考,具体如下:
首先我在数据库里建了两张表,一个是用户的积分表,一个是签到状态表,分来用来记录用户的积分数和先到状态

在用户签到状态表中我们有一个字段,last_sign_time,即上一次签到时间,每次可以签到的时候把这个时间与当前时间进行比较 如果相差为0天,则说明今天已签到(这个签到是24小时内只能签到一次,即两次签到时间要相差24小时以上).如果等于一天则今日可以签到,如果2天及其以上则说明漏签了.
通过时间戳的判断,及时更新状态表,并且当可以签到的时候则对用户积分表进行操作,即更新用户积分.
<?php
[email protected]$_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){
[email protected]$_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);//关闭连接
?>

原文地址:https://www.cnblogs.com/zwt0626/p/8251395.html

时间: 2024-07-31 10:10:52

PHP 签到,与时间获取的相关文章

时间获取程序客户端 TCP 协议相关性

本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie 最初代码: 这是一个简单的时间获取客户程序.客户与服务器建立一个TCP连接后,服务器以直观 可读格式简单地送回当前时间和日期 这个例子是协议相关,使用 inet_pton TCP/IPv4, IPv6 协议相关 IPv4 --> IPv6 (把代码中出现的左边的字符串换为右边的,就变成了IPv6版本的) sockaddr_in --> sockaddr_in6 AF_INET -->

时间获取程序服务器 TCP 协议相关性

本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie 最初代码: 这是一个简单的时间获取服务器程序.它和时间获取程序客户端一道工作. TCP/IPv4, IPv6 协议相关 IPv4 --> IPv6 (把代码中出现的左边的字符串换为右边的,就变成了IPv6版本的) sockaddr_in --> sockaddr_in6 AF_INET --> AF_INET6 sin_family --> sin6_family sin_p

简介(1)-概述、一个简单的时间获取客户程序

1.概述 大多数网络应用划分:客户(client)和服务器(server) 一些复杂的网络应用:异步回调通信,即服务器向客户发起请求消息. 协议栈:应用协议.TCP协议.IP协议.以太网协议 局域网(local area network,LAN),广域网(wide area network,WAN). 路由器是广域网的架构设备. 因特网:当今最大的广域网. POSIX:一种被多数厂商采纳的标准. 2.一个简单的时间获取客户程序 1)创建套接字 socket函数 2)指定服务器的IP地址和端口 s

根据日期字符串获取星期几,日期获取星期,时间获取星期,js获取星期

根据日期字符串获取星期几,日期获取星期,时间获取星期,js获取星期 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>. 蕃薯耀 2016年12月30日 08:47:38 星期五 http://www.cnblogs.com/fanshuyao/ /** * 根据日期字符串获取星期几 *

UNIX网络编程卷1 时间获取程序server TCP 协议相关性

本文为senlie原创.转载请保留此地址:http://blog.csdn.net/zhengsenlie 最初代码: 这是一个简单的时间获取server程序.它和时间获取程序client一道工作. 它是 协议相关,把代码中出现的左边的字符串换为右边的,就变成了IPv6版本号的 IPv4 --> IPv6 sockaddr_in --> sockaddr_in6 AF_INET --> AF_INET6 sin_family --> sin6_family sin_port --&

L脚本语言开发的时间获取服务器和客户端

#scp #这是一个TCP时间获取服务器的例子 #它不断监听一个网络连接 #如果有网络连接到来 #就通过新建立的网络连接发送当前时间 定义:字符串,string2,"" 定义:地址,addr2,127.0.0.1,13 定义:整数,字节数,0 定义:网络连接,conn2,TCP 定义:函数,routine 开始:函数,routine 监听:conn2,addr2 定义:时间,time1 读取:当前时间,time1 转换:string2,time1 取大小:字符串,string2,字节数

Android时间获取与使用

编写Android网络程序时难免会遇到手机时间不准确的问题,本文总结了一些常用的时间获取与校正方法: 转载请注明:http://blog.csdn.net/xzy2046 1.获取本机当前时间: Time local = new Time(); local.set(System.currentTimeMillis()); mLocalTime.setText(local.format2445()); 2.获取本机时间对应的上海时间: Time shanghai = new Time("Asia/

C# 根据时间获取目录及文件

实际开发中遇到的问题,记录下来以便以后查看 业务:每天自动生成一个目录,在按日期生成的目录中会生成N个子目录, 子目录中会生成一至两个文件,先在需要取到子目录中的文件 1 using System; 2 using System.IO; 3 using System.Collections.Generic; 4 using System.Linq; 5 using System.Text; 6 using System.Threading.Tasks; 7 8 namespace MULUTES

Linux网络编程(简单的时间获取服务器)

1.一个简单的服务器时间获取程序 服务器和客户端采用UDP通信的方式,来编写一个简单的时间获取应用. 把过程大致理顺一下,首先是服务器端的编写,使用的是迭代的方式,没有并发 先创建一个socket而后bind服务器,绑定之后就可以创建一个循环来接收和发送 信息了,以达到和客户端之间的通信. #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include

java 根据当天时间 获取前7天之间的时间 和后多少天的查询时间

java 根据当天时间 获取前7天之间的时间  和后多少天的查询时间 package com.kugou.schedu.service; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import org.springframework.