PHP连续签到功能实现方法详解


Posted in PHP onDecember 04, 2019

本文实例讲述了PHP连续签到功能实现方法。分享给大家供大家参考,具体如下:

require "./global.php";
  $act = isset($_GET['act']) ? $_GET['act'] : "error";
  // d($act);
  switch($act){
    case "qiandao":
      $uid = intval($_POST['uid']);
      $res = $db -> get('qian_dao','*',array('uid'=>$uid));
      // last_query();
      $time = time();
      //判断今天是否签到
      $todayBegin=strtotime(date('Y-m-d')." 00:00:00"); 
      $todayEnd= strtotime(date('Y-m-d')." 23:59:59"); 
      $isexit = $db -> get('qian_dao','id',array('AND'=>array('uid'=>$uid,'qian_dao_time[>=]'=>$todayBegin,'qian_dao_time[<=]'=>$todayEnd)));
      // last_query();
      if($isexit){
        // echo "今天已签到!";
        Log::writeLog(print_r(array('state'=>'stop','msg'=>'今天已签到!'),true));
        echo json_encode(array('state'=>'stop','msg'=>'今天已签到!'));
        exit;
      }
      if($res){
        //存在签到
        if((time() - $res['qian_dao_time'] > 24*60*60)){ // 判断时间是否大于24小时
          // 让字段归0
          $addInfo = $db -> update('qian_dao',array('qian_dao_num'=>1,'qian_dao_time'=>$time),array('uid'=>$uid));
        }else{
          // 更新签到的天数
          $addInfo = $db -> update('qian_dao',array('qian_dao_num[+]'=>1,'qian_dao_time'=>$time),array('uid'=>$uid));
        }
      }else{
        // echo '您还没有签到过';
        //没有签到过
        $db -> insert('qian_dao',array('uid'=>$uid,'qian_dao_num'=>1,'qian_dao_time'=>$time));
        // echo $db ->last_query();
      }
      // 插入签到记录
      $db -> insert('sign',array(
        'uid'=>$uid,
        'dateline'=>$time,
      ));
      // 获取连续签到的天数
      $info = $db -> get('qian_dao','qian_dao_num',array('uid'=>$uid));
      echo json_encode(array('state'=>'success','msg'=>"您是第".$info."天签到"));
      break;
    default :
      echo json_encode(array("ret"=>0,"msg"=>"操作不存在!"));
      break;
  }

sql:

CREATE TABLE IF NOT EXISTS `qian_dao` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `uid` int(1) NOT NULL COMMENT '用户id',
 `qian_dao_num` int(11) NOT NULL COMMENT '签到次数',
 `qian_dao_time` int(11) NOT NULL COMMENT '签到时间',
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
CREATE TABLE IF NOT EXISTS `sign` (
 `uid` int(11) NOT NULL,
 `dateline` varchar(10) COLLATE utf8_bin NOT NULL,
 KEY `uid` (`uid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

html:

<?php
  include './global.php';
  $uid = 1;
  $todayBegin=strtotime(date('Y-m-d')." 00:00:00"); 
  $todayEnd= strtotime(date('Y-m-d')." 23:59:59"); 
  $isexit = $db -> get('qian_dao','id',array('AND'=>array('uid'=>$uid,'qian_dao_time[>=]'=>$todayBegin,'qian_dao_time[<=]'=>$todayEnd)));
  $flag = '';
  if($isexit){
    $flag = 'current';
  }
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>jquery制作每天或每日打卡签到特效</title>
<meta name="description" content="jquery制作论坛或社交网站的每日或每天打卡签到特效,点击打卡标签显示打卡签到效果。jquery下载" />
</head>
<body>
<style type="text/css">
*{margin:0;padding:0;list-style-type:none;}
a,img{border:0;text-decoration:none;}
/*今日签到*/
.singer{border:1px solid #DCDBDB;padding:10px;height:45px;line-height:45px;width:290px;margin:20px auto;}
.ul{border:1px solid #DCDBDB;padding:0 10px 10px 10px;;width:290px;margin:20px auto;}
.li{border:1px solid #DCDBDB;padding-left:10px;height:25px;line-height:25px;width:280px;margin:10px 0 0 0;}
.singer_l_cont, .singer_r_img{float:left;}
.singer_l_cont{width:145px;background:url(images/sing_per.gif) no-repeat left 12px;text-indent:23px;font-size:12px;}
.singer_r_img{display:block;width:114px;height:52px;background:url(images/sing_week.gif) right 2px no-repeat;vertical-align:middle;float:right;*margin-bottom:-10px;}
.singer_r_img:hover{background-position:right -53px;text-decoration:none;}
.singer_r_img span{margin-left:14px;font-size:16px;font-family:'Hiragino Sans GB','Microsoft YaHei',sans-serif !important;font-weight:700;color:#165379;}
.singer_r_img.current{background:url(images/sing_sing.gif) no-repeat 0 2px;}
</style>
  <div class="singer">
    <div class="singer_l_cont">
      <span>每天签到赢取PK币</span>
    </div>
    <div class="singer_r_r">
      <a class="singer_r_img <?php echo $flag;?>" href="#" rel="external nofollow" >    
        <span id="sing_for_number"></span>
      </a>
    </div>
  </div><!--singer end-->
<script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script>
<script type="text/javascript">
/*签到模块日期捕捉:*/
function week(){
  var objDate= new Date();
  var week = objDate.getDay();
  switch(week)
    {
      case 0:
      week="周日";
      break;
      case 1:
      week="周一";
      break;
      case 2:
      week="周二";
      break;
      case 3:
      week="周三";
      break;
      case 4:
      week="周四";
      break;
      case 5:
      week="周五";
      break;
      case 6:
      week="周六";
      break;
    }
  $("#sing_for_number").html( week );
}
$(document).ready(function(){
  week();
  var cache=new Array(); // 缓存变量,当数据被访问过之后放置在缓存中,加快访问速度
  $(".singer_r_img").click(function(){
    // 如果缓存中存在数据,那么直接从缓存中读取;如果不存在数据,那么就从数据库中读取,并把数据存入缓存
    if (typeof(cache['stop'])=='undefined') {
    $.ajax({
      url:"action.php?act=qiandao",
      type:"post",
      dataType:'json',
      data:{
        uid:1,
      },
      async:false,
      success:function(data){
        // alert(data.msg);
        switch(data.state){
          case 'success':
            alert(data.msg);
            break
          case 'stop':
            cache['stop'] = data.msg;
            alert(data.msg);
            break;
        }
        $(".singer_r_img").addClass("current");
      }
    })
    }else{
      alert(cache['stop'])
    }
  })
})
</script>
</body>
</html>
<?php
  // 获取签到记录
  $sign = $db -> select('sign','*',array('uid'=>$uid,'ORDER'=>'dateline DESC'));
?>
<ul class='ul'>
  <?php
  if(empty($sign)){
  ?>
    <li class="li">暂无签到信息</li>
  <?php
  }else{
    foreach($sign as $k=>$v){
  ?>
      <li class="li"><span><?php echo ($k + 1);?></span> <?php echo date('Y-m-d H:i:s',$v['dateline']);?></li>
  <?php
    }
  }
  ?>
</ul>

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
用php和MySql来与ODBC数据连接
Oct 09 PHP
PHP EOT定界符的使用详解
Sep 30 PHP
PHP 基本语法格式
Dec 15 PHP
深入PHP许愿墙模块功能分析
Jun 25 PHP
php 购物车完整实现代码
Jun 05 PHP
PHP中if和or运行效率对比
Dec 12 PHP
PHP实现过滤掉非汉字字符只保留中文字符
Jun 04 PHP
PHP实现的浏览器检查类
Apr 11 PHP
ThinkPHP中order()使用方法详解
Apr 19 PHP
PHP生成图像验证码的方法小结(2种方法)
Jul 18 PHP
PHP递归删除多维数组中的某个值
Apr 17 PHP
php swoole多进程/多线程用法示例【基于php7nts版】
Aug 12 PHP
Laravel框架Eloquent ORM修改数据操作示例
Dec 03 #PHP
Laravel框架Eloquent ORM删除数据操作示例
Dec 03 #PHP
Laravel框架基础语法与知识点整理【模板变量、输出、include引入子视图等】
Dec 03 #PHP
Laravel框架Blade模板简介及模板继承用法分析
Dec 03 #PHP
在phpstudy集成环境下的nginx服务器下配置url重写
Dec 02 #PHP
php 实现简单的登录功能示例【基于thinkPHP框架】
Dec 02 #PHP
关于Yii2框架跑脚本时内存泄漏问题的分析与解决
Dec 01 #PHP
You might like
深入php多态的实现详解
2013/06/09 PHP
php Imagick获取图片RGB颜色值
2014/07/28 PHP
非常不错的一个javascript 类
2006/11/07 Javascript
javascript中的void运算符语法及使用介绍
2013/03/10 Javascript
javascript中attribute和property的区别详解
2014/06/05 Javascript
JS中完美兼容各大浏览器的scrolltop方法
2015/04/17 Javascript
基于JavaScript实现高德地图和百度地图提取行政区边界经纬度坐标
2016/01/22 Javascript
浅谈$('div a') 与$('div&gt;a')的区别
2016/07/18 Javascript
vue.js实例todoList项目
2017/07/07 Javascript
基于ajax和jsonp的原生封装(实例)
2017/10/16 Javascript
vuejs简单验证码功能完整示例
2019/01/08 Javascript
Vue.js特性Scoped Slots的浅析
2019/02/20 Javascript
javascript 原型与原型链的理解及实例分析
2019/11/23 Javascript
[13:55]Newbee vs Team Spirit
2018/06/07 DOTA
[01:11:11]Alliance vs RNG 2019国际邀请赛淘汰赛 败者组BO1 8.20.mp4
2020/07/19 DOTA
Python针对给定列表中元素进行翻转操作的方法分析
2018/04/27 Python
Python利用Django如何写restful api接口详解
2018/06/08 Python
python实现自动登录
2018/09/17 Python
python实现矩阵打印
2019/03/02 Python
Python3模拟curl发送post请求操作示例
2019/05/03 Python
Django Rest framework解析器和渲染器详解
2019/07/25 Python
Python小程序 控制鼠标循环点击代码实例
2019/10/08 Python
pytorch dataloader 取batch_size时候出现bug的解决方式
2020/02/20 Python
Java byte数组操纵方式代码实例解析
2020/07/22 Python
html5 http的轮询和Websocket原理
2018/10/19 HTML / CSS
Oakley西班牙官方商店:太阳眼镜和男女运动服
2019/04/26 全球购物
eBay意大利购物网站:eBay.it
2019/09/04 全球购物
群众路线教育实践活动心得体会
2014/03/07 职场文书
公司门卫岗位职责
2014/03/15 职场文书
公民授权委托书范本
2014/09/17 职场文书
2015年青年志愿者协会工作总结
2015/04/27 职场文书
pandas中DataFrame重置索引的几种方法
2021/05/24 Python
PyMongo 查询数据的实现
2021/06/28 Python
Springboot如何同时装配两个相同类型数据库
2021/11/17 Java/Android
Python实现抖音热搜定时爬取功能
2022/03/16 Python
Windows Server 2016服务器用户管理及远程授权图文教程
2022/08/14 Servers