欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2023-10-20 15:20:50
本文实例讲述了php连续签到功能实现方法。分享给大家供大家参考,具体如下: require "./global.php"; $act = isset($_get['ac...

本文实例讲述了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>