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 if 想到的些问题
Mar 22 PHP
据说是雅虎的一份PHP面试题附答案
Jan 07 PHP
phpMyAdmin链接MySql错误 个人解决方案
Dec 28 PHP
PHP第一季视频教程(李炎恢+php100 不断更新)
May 29 PHP
php设计模式 Prototype (原型模式)代码
Jun 26 PHP
php开启openssl的方法
May 15 PHP
php延迟静态绑定实例分析
Feb 08 PHP
PHP 7的一些引人注目的新特性简单介绍
Nov 08 PHP
thinkphp框架实现数据添加和显示功能
Jun 29 PHP
php版微信支付api.mch.weixin.qq.com域名解析慢原因与解决方法
Oct 12 PHP
php使用GD2绘制几何图形示例
Feb 15 PHP
PHP生成各种随机验证码的方法总结【附demo源码】
Jun 05 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 URL编码解码函数代码
2009/03/10 PHP
php ob_flush,flush在ie中缓冲无效的解决方法
2010/05/09 PHP
php数组函数序列之array_key_exists() - 查找数组键名是否存在
2011/10/29 PHP
深入PHP curl参数的详解
2013/06/17 PHP
php实现倒计时效果
2015/12/19 PHP
关于Laravel参数验证的一些疑与惑
2019/11/19 PHP
PhpSpreadsheet设置单元格常用操作汇总
2020/11/13 PHP
jQuery 学习 几种常用方法
2009/06/11 Javascript
IE网页js语法错误2行字符1、FF中正常的解决方法
2013/09/09 Javascript
jquery对ajax的支持介绍
2013/12/10 Javascript
js数值和和字符串进行转换时可以对不同进制进行操作
2014/03/05 Javascript
JS中prototype的用法实例分析
2015/03/19 Javascript
jquery制作多功能轮播图插件
2015/04/02 Javascript
JS根据浏览器窗口大小实时动态改变网页文字大小的方法
2016/02/25 Javascript
JavaScript实现图片自动加载的瀑布流效果
2016/04/11 Javascript
animate 实现滑动切换效果【实例代码】
2016/05/05 Javascript
微信小程序 地图map实例详解
2017/06/07 Javascript
JS交互点击WKWebView中的图片实现预览效果
2018/01/05 Javascript
详解基于webpack&amp;gettext的前端多语言方案
2019/01/29 Javascript
Bootstrap实现省市区三级联动(亲测可用)
2019/07/26 Javascript
javascript设计模式 ? 桥接模式原理与应用实例分析
2020/04/13 Javascript
python发送邮件示例(支持中文邮件标题)
2014/02/16 Python
跟老齐学Python之关于循环的小伎俩
2014/10/02 Python
Python中的getopt函数使用详解
2015/07/28 Python
python算法表示概念扫盲教程
2017/04/13 Python
PyQt5 QSerialPort子线程操作的实现
2018/04/21 Python
python调用c++传递数组的实例
2019/02/13 Python
python数据挖掘需要学的内容
2019/06/23 Python
Python PyInstaller安装和使用教程详解
2020/01/08 Python
Python实现验证码识别
2020/06/15 Python
2019年Java 最常见的 面试题
2016/10/19 面试题
开展党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
卢旺达饭店观后感
2015/06/05 职场文书
难以忽视的真相观后感
2015/06/05 职场文书
centos8安装MongoDB的详细过程
2021/10/24 MongoDB
Python实战之大鱼吃小鱼游戏的实现
2022/04/01 Python