当前位置:首页 > 综合实例 > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2022-01-25 20:16:18 浏览: 评论:0 

这篇文章主要介绍了PHP连续签到功能实现方法,结合实例形式详细分析了PHP结合mysql数据库实现连续签到功能相关操作技巧,需要的朋友可以参考下。

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

  1. require "./global.php"
  2.   $act = isset($_GET['act']) ? $_GET['act'] : "error"
  3.   // d($act); 
  4.   switch($act){ 
  5.     case "qiandao"
  6.       $uid = intval($_POST['uid']); 
  7.       $res = $db -> get('qian_dao','*',array('uid'=>$uid)); 
  8.       // last_query(); 
  9.       $time = time(); 
  10.       //判断今天是否签到 
  11.       $todayBegin=strtotime(date('Y-m-d')." 00:00:00");  
  12.       $todayEndstrtotime(date('Y-m-d')." 23:59:59");  
  13.       $isexit = $db -> get('qian_dao','id',array('AND'=>array('uid'=>$uid,'qian_dao_time[>=]'=>$todayBegin,'qian_dao_time[<=]'=>$todayEnd))); 
  14.       // last_query(); 
  15.       if($isexit){ 
  16.         // echo "今天已签到!"; 
  17.         Log::writeLog(print_r(array('state'=>'stop','msg'=>'今天已签到!'),true)); 
  18.         echo json_encode(array('state'=>'stop','msg'=>'今天已签到!')); 
  19.         exit
  20.       } 
  21.       if($res){ 
  22.         //存在签到 
  23.         if((time() - $res['qian_dao_time'] > 24*60*60)){ // 判断时间是否大于24小时 
  24.           // 让字段归0 
  25.           $addInfo = $db -> update('qian_dao',array('qian_dao_num'=>1,'qian_dao_time'=>$time),array('uid'=>$uid)); 
  26.         }else
  27.           // 更新签到的天数 
  28.           $addInfo = $db -> update('qian_dao',array('qian_dao_num[+]'=>1,'qian_dao_time'=>$time),array('uid'=>$uid)); 
  29.         } 
  30.       }else
  31.         // echo '您还没有签到过'; 
  32.         //没有签到过 
  33.         $db -> insert('qian_dao',array('uid'=>$uid,'qian_dao_num'=>1,'qian_dao_time'=>$time)); 
  34.         // echo $db ->last_query(); 
  35.       } 
  36.       // 插入签到记录 
  37.       $db -> insert('sign',array
  38.         'uid'=>$uid
  39.         'dateline'=>$time
  40.       )); 
  41.       // 获取连续签到的天数 
  42.       $info = $db -> get('qian_dao','qian_dao_num',array('uid'=>$uid)); 
  43.       echo json_encode(array('state'=>'success','msg'=>"您是第".$info."天签到")); 
  44.       break
  45.     default : 
  46.       echo json_encode(array("ret"=>0,"msg"=>"操作不存在!")); 
  47.       break
  48.   } 

sql:

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

html:

  1. <?php 
  2.   include './global.php'
  3.   $uid = 1; 
  4.   $todayBegin=strtotime(date('Y-m-d')." 00:00:00");  
  5.   $todayEndstrtotime(date('Y-m-d')." 23:59:59");  
  6.   $isexit = $db -> get('qian_dao','id',array('AND'=>array('uid'=>$uid,'qian_dao_time[>=]'=>$todayBegin,'qian_dao_time[<=]'=>$todayEnd))); 
  7.   $flag = ''
  8.   if($isexit){ 
  9.     $flag = 'current'
  10.   } 
  11. ?> 
  12. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
  13. <html xmlns="http://www.w3.org/1999/xhtml"
  14. <head> 
  15. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
  16. <title>jquery制作每天或每日打卡签到特效</title> 
  17. <meta name="description" content="jquery制作论坛或社交网站的每日或每天打卡签到特效,点击打卡标签显示打卡签到效果。jquery下载" /> 
  18. </head> 
  19. <body> 
  20. <style type="text/css"
  21. *{margin:0;padding:0;list-style-type:none;} 
  22. a,img{border:0;text-decoration:none;} 
  23. /*今日签到*/ 
  24. .singer{border:1px solid #DCDBDB;padding:10px;height:45px;line-height:45px;width:290px;margin:20px auto;} 
  25. .ul{border:1px solid #DCDBDB;padding:0 10px 10px 10px;;width:290px;margin:20px auto;} 
  26. .li{border:1px solid #DCDBDB;padding-left:10px;height:25px;line-height:25px;width:280px;margin:10px 0 0 0;} 
  27. .singer_l_cont, .singer_r_img{float:left;} 
  28. .singer_l_cont{width:145px;background:url(images/sing_per.gif) no-repeat left 12px;text-indent:23px;font-size:12px;} 
  29. .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;} 
  30. .singer_r_img:hover{background-position:right -53px;text-decoration:none;} 
  31. .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;} 
  32. .singer_r_img.current{background:url(images/sing_sing.gif) no-repeat 0 2px;} 
  33. </style> 
  34.   <div class="singer"
  35.     <div class="singer_l_cont"
  36.       <span>每天签到赢取PK币</span> 
  37.     </div> 
  38.     <div class="singer_r_r"
  39.       <a class="singer_r_img <?php echo $flag;?>" href="#" rel="external nofollow" >     
  40.         <span id="sing_for_number"></span> 
  41.       </a> 
  42.     </div> 
  43.   </div><!--singer end--> 
  44. <script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script> 
  45. <script type="text/javascript"
  46. /*签到模块日期捕捉:*/ 
  47. function week(){ 
  48.   var objDate= new Date(); 
  49.   var week = objDate.getDay(); 
  50.   switch(week) 
  51.     { 
  52.       case 0: 
  53.       week="周日"
  54.       break
  55.       case 1: 
  56.       week="周一"
  57.       break
  58.       case 2: 
  59.       week="周二"
  60.       break
  61.       case 3: 
  62.       week="周三"
  63.       break
  64.       case 4: 
  65.       week="周四"
  66.       break
  67.       case 5: 
  68.       week="周五"
  69.       break
  70.       case 6: 
  71.       week="周六"
  72.       break
  73.     } 
  74.   $("#sing_for_number").html( week ); 
  75. $(document).ready(function(){ 
  76.   week(); 
  77.   var cache=new Array(); // 缓存变量,当数据被访问过之后放置在缓存中,加快访问速度 
  78.   $(".singer_r_img").click(function(){ 
  79.     // 如果缓存中存在数据,那么直接从缓存中读取;如果不存在数据,那么就从数据库中读取,并把数据存入缓存 
  80.     if (typeof(cache['stop'])=='undefined') { 
  81.     $.ajax({ 
  82.       url:"action.php?act=qiandao"
  83.       type:"post"
  84.       dataType:'json'
  85.       data:{ 
  86.         uid:1, 
  87.       }, 
  88.       async:false, 
  89.       success:function(data){ 
  90.         // alert(data.msg); 
  91.         switch(data.state){ 
  92.           case 'success'
  93.             alert(data.msg); 
  94.             break 
  95.           case 'stop'
  96.             cache['stop'] = data.msg; 
  97.             alert(data.msg); 
  98.             break
  99.         } 
  100.         $(".singer_r_img").addClass("current"); 
  101.       } 
  102.     }) 
  103.     }else
  104.       alert(cache['stop']) 
  105.     } 
  106.   }) 
  107. }) 
  108. </script> 
  109. </body> 
  110. </html> 
  111. <?php 
  112.   // 获取签到记录 
  113.   $sign = $db -> select('sign','*',array('uid'=>$uid,'ORDER'=>'dateline DESC')); 
  114. ?> 
  115. <ul class='ul'
  116.   <?php 
  117.   if(emptyempty($sign)){ 
  118.   ?> 
  119.     <li class="li">暂无签到信息</li> 
  120.   <?php 
  121.   }else
  122.     foreach($sign as $k=>$v){ 
  123.   ?> 
  124.       <li class="li"><span><?php echo ($k + 1);?></span>&nbsp;<?php echo date('Y-m-d H:i:s',$v['dateline']);?></li> 
  125.   <?php 
  126.     } 
  127.   } 
  128.   ?> 
  129. </ul>

Tags: PHP连续签到功能

分享到: