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();
$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函数count(),或是sizeof();
sizeof()和count()具有同样的用途,这两个函数都可以返回数组元素个数.可以得到一个常规标量变量中的元素个数,
如果传递给这个函数的数组是一个空数组,或者是一个没有经过设定的变量,返回的数组元素个数就是0;两函数功能一样,
手册上讲,sizeof()是函数count()的别名。
时间格式化查询
1.获取上个月第一天及最后一天.
echo date('Y-m-01', strtotime('-1 month'));
echo strtotime(date('Y-m-01 0:00:00', strtotime('-1 month'))); //月初第一天时间戳
echo "<br/>";
echo date('Y-m-t', strtotime('-1 month'));
echo "<br/>";
2.获取当月第一天及最后一天.
$BeginDate=date('Y-m-01', strtotime(date("Y-m-d")));
echo $BeginDate;
echo "<br/>";
echo date('Y-m-d', strtotime("$BeginDate +1 month -1 day"));
echo "<br/>";
3.获取当天年份、月份、日及天数.
echo " 本月共有:".date("t")."天";
echo " 当前年份".date('Y');
echo " 当前月份".date('m');
echo " 当前几号".date('d');
echo "<br/>";
4.使用函数及数组来获取当月第一天及最后一天,比较实用,出自网友.
function getthemonth($date)
{
$firstday = date('Y-m-01', strtotime($date));
$lastday = date('Y-m-t', strtotime($date));
return array($firstday,$lastday);
}
$today = date("Y-m-d");
$day=getthemonth($today);
echo "当月的第一天: ".$day[0]." 当月的最后一天: ".$day[1];
echo "<br/>";
PHP 签到,与时间获取,数组长度获取的更多相关文章
- C++:获取数组长度
C/C++中如何获取数组的长度? 如何获取数组的长度 2010-12-15 20:49 C/C++中如何获取数组的长度? 收藏 C.C++中没有提供 直接获取数组长度的函数,对于存放字符串 ...
- php获取数组长度的方法(有实例)
php获取数组长度的方法,php为我们提供了两个函数可以计算一维数组长度,如count,sizeof都可以直接统计数组长度,还有获取二维数组的方法. 在php中获取数组长度方法很简单,php为我们提供 ...
- c/c++ 获取数组长度
在C/C++中并没有提供直接获取数组长度的函数 c/c++ 获取数组长度其中一种方法是使用sizeof(array) / sizeof(array[0]). 在C语言中习惯上在使用时都把它定义成一个宏 ...
- Java-Runoob-高级教程-实例-数组:03. Java 实例 – 获取数组长度-*
ylbtech-Java-Runoob-高级教程-实例-数组:03. Java 实例 – 获取数组长度 1.返回顶部 Java 实例 - 获取数组长度 Java 实例 本文我们将为大家介绍如何使用数 ...
- PHP获取数组长度的方法 函数参数的比较
在php中获取数组长度方法很简单,php为我们提供了两个函数可以计算一维数组长度,如count,sizeof都可以直接统计数组长度哦,下面我们来看几个实例吧.php如何获取数组的长度,使用php函数c ...
- php中如何获取数组长度
php获取数组的长度的方法 一.总结 一句话总结:count方法和sizeof方法 二.php获取数组的长度的方法 php获取数组长度的方法: 一). 获取一维数组的方法: 1.count.sizeo ...
- js获取数组长度,对象成员个数字、符串字数
文章来源:百度文库 Javascript怎么得到数组长度(也就是数组的元素个数)? Javascript怎么获取对象的成员个数? 你肯定想到了array.length!? 那么我们来测试一下下面这 ...
- PHP | 获取数组长度的方法
一.获取一维数组的长度 count.sizeof 都可以直接统计一维数组长度. 例如:$arr = Array('0','1','2','3','4'); echo count($arr) ...
- sql获取数组长度
需求:获取字符串数组1,2,3,4的长度,当然也可以是其他分隔符1|2|3等 方法:通过自定义函数来实现 /* 获取字符串数组长度 */ from sysobjects where id = obje ...
随机推荐
- cut 的用法
cut 文件内容查看 显示行中的指定部分,删除文件中指定字段 显示文件的内容,类似于下的type命令. 说明 该命令有两项功能,其一是用来显示文件的内容,它依次读取由参数file所指明的文件,将它们的 ...
- SQL注入的浅尝辄止
简单的说,SQL注入就是通过在前端页面输入SQL语句,导致系统暴露异常信息在前端页面显示,非法者通过这些异常信息获取数据库的相干信息,为攻击系统做准备.
- mysql如何配置sql记录
原文链接:http://www.qqdeveloper.com/detail/11/1.html 为什么要记录sql记录 主要目的是为了检测我们的网站安全问题,有效的避免一些sql注入或者是xss攻击 ...
- php函数strtotime结合date时间修饰语的使用
下面简单介绍在项目开发中date时间函数和strtotime所遇到的问题,以及解决办法. 原文地址:小时刻个人技术博客 > http://small.aiweimeng.top/index.ph ...
- 网络文件系统nfs在ubuntu16.04的安装
1.搜索nfs-sudo apt-cache search nfs- 2.安装sudo apt-get install nfs-kernel-server 3.配置:/etc/exports /hom ...
- 18CCPC网赛A 贪心
Buy and Resell Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)To ...
- ubuntu安装cuda、cudnn
环境: Ubuntu 16.04.4 LTS CUDA:8.0 CUDNN:5.1 CUDA下载:https://developer.nvidia.com/cuda-80-ga2-download-a ...
- Java中的IO
引言: 对程序语言的设计者来说,创建一个好的输入/输出(I/O)系统是一项艰难的任务 < Thinking in Java > 本文的目录视图如下: Java IO概要 a ...
- TensorFlow之tf.nn.dropout():防止模型训练过程中的过拟合问题
一:适用范围: tf.nn.dropout是TensorFlow里面为了防止或减轻过拟合而使用的函数,它一般用在全连接层 二:原理: dropout就是在不同的训练过程中随机扔掉一部分神经元.也就是让 ...
- mybatis入门(一):jdbc的缺点
mybatis的基础内容 1.mybatis的框架原理 2.mybatis开发dao两种方法: a.原始dao开发方法(程序需要编写dao接口和dao实现类) b.mybatis的mapper接口(相 ...