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

php+mysql+jquery实现日历签到功能

程序员文章站 2024-03-07 20:05:39
在网站开发过程中我们会经常用到签到功能来奖励用户积分,或者做一些其他活动。这次项目开发过程中做了日历签到,因为没有经验所有走了很多弯路,再次记录过程和步骤。 1.日历签到...

在网站开发过程中我们会经常用到签到功能来奖励用户积分,或者做一些其他活动。这次项目开发过程中做了日历签到,因为没有经验所有走了很多弯路,再次记录过程和步骤。

1.日历签到样式:

php+mysql+jquery实现日历签到功能

2.本次签到只记录本月签到数,想要查询可以写其他页面,查询所有签到记录。(功能有,非常麻烦,古没有做。)

3.前台代码

<include file="public:menu" />
<style type="text/css">  
*{margin:0;padding:0;font:14px/1.8 "helvetica neue","microsoft yahei";}
</style>
<div class="ser_bx">
  <div class="ser_bxc">
    <span style="color:#5381b5;">签到记录</span>
    <if condition="$res['0']['points'] eq '5'">
      <div class="already btn_center">已签到</div>
    <else />
      <div class="ser_mbx btn_center">立即签到</div>
    </if>
    <div class="already btn_center" style="display:none;">已签到</div>
    <!--<div class="minein">积分 : <span style="color:#b81d25">{$poin.points}</span></div>-->
  </div>
</div>
<div class="check_box">
<div style="width:500px;height:400px;margin:0 auto;">
  <div style="width:300px;height:300px;margin-left:50px;" id="calendar"></div>
</div>
  </div>
<script type="text/javascript">
   $(document).ready(function(){
     $(".ser_mbx").click(function(){
       $.ajax({
        url:"{:u('index/checkin')}",
          type:'post',
        datatype:"json",
        success:function(msg){
          $(".already").show();
          $(".ser_mbx").hide();
       monthsign();
        }
      });
     });
   });
</script>
 <script type="text/javascript" language="javascript">
  $(document).ready(function(){  
        monthsign();
   }); 
  function monthsign(){
     //ajax获取日历json数据
     $.ajax({
        url:"{:u('index/monthsign')}",
          type:'post',
        datatype:"json",
        success:function(msg){
          //alert(msg);
          /*var signlist=[{"signday":"10"},{"signday":"11"},{"signday":"12"},{"signday":"13"}];
          */
          calutil.init(json.parse(msg));
        }
      });
  }
 </script> 
 <script type="text/javascript">
  var calutil = {
  //当前日历显示的年份
  showyear:2015,
  //当前日历显示的月份
  showmonth:1,
  //当前日历显示的天数
  showdays:1,
  eventname:"load",
  //初始化日历
  init:function(signlist){
    calutil.setmonthandday();
    calutil.draw(signlist);
    calutil.bindenvent();
  },
  draw:function(signlist){
    //绑定日历
    var str = calutil.drawcal(calutil.showyear,calutil.showmonth,signlist);
    $("#calendar").html(str);
    //绑定日历表头
    var calendarname=calutil.showyear+"年"+calutil.showmonth+"月";
    $(".calendar_month_span").html(calendarname);  
  },
  //绑定事件
  bindenvent:function(){
    //绑定上个月事件
    $(".calendar_month_prev").click(function(){
      //ajax获取日历json数据
      /*var signlist=[{"signday":"10"},{"signday":"11"},{"signday":"12"},{"signday":"13"}];
      calutil.eventname="prev";
      calutil.init(signlist);*/
    });
    //绑定下个月事件
    $(".calendar_month_next").click(function(){
      //ajax获取日历json数据
      /*var signlist=[{"signday":"10"},{"signday":"11"},{"signday":"12"},{"signday":"13"}];
      calutil.eventname="next";
      calutil.init(signlist);*/
    });
  },
  //获取当前选择的年月
  setmonthandday:function(){
    switch(calutil.eventname)
    {
      case "load":
        var current = new date();
        calutil.showyear=current.getfullyear();
        calutil.showmonth=current.getmonth() + 1;
        break;
      case "prev":
        var nowmonth=$(".calendar_month_span").html().split("年")[1].split("月")[0];
        calutil.showmonth=parseint(nowmonth)-1;
        if(calutil.showmonth==0)
        {
            calutil.showmonth=12;
            calutil.showyear-=1;
        }
        break;
      case "next":
        var nowmonth=$(".calendar_month_span").html().split("年")[1].split("月")[0];
        calutil.showmonth=parseint(nowmonth)+1;
        if(calutil.showmonth==13)
        {
            calutil.showmonth=1;
            calutil.showyear+=1;
        }
        break;
    }
  },
  getdaysinmonth : function(imonth, iyear){
   var dprevdate = new date(iyear, imonth, 0);
   return dprevdate.getdate();
  },
  bulidcal : function(iyear, imonth) {
   var amonth = new array();
   amonth[0] = new array(7);
   amonth[1] = new array(7);
   amonth[2] = new array(7);
   amonth[3] = new array(7);
   amonth[4] = new array(7);
   amonth[5] = new array(7);
   amonth[6] = new array(7);
   var dcaldate = new date(iyear, imonth - 1, 1);
   var idayoffirst = dcaldate.getday();
   var idaysinmonth = calutil.getdaysinmonth(imonth, iyear);
   var ivardate = 1;
   var d, w;
   amonth[0][0] = "日";
   amonth[0][1] = "一";
   amonth[0][2] = "二";
   amonth[0][3] = "三";
   amonth[0][4] = "四";
   amonth[0][5] = "五";
   amonth[0][6] = "六";
   for (d = idayoffirst; d < 7; d++) {
    amonth[1][d] = ivardate;
    ivardate++;
   }
   for (w = 2; w < 7; w++) {
    for (d = 0; d < 7; d++) {
     if (ivardate <= idaysinmonth) {
      amonth[w][d] = ivardate;
      ivardate++;
     }
    }
   }
   return amonth;
  },
  ifhassigned : function(signlist,day){
   var signed = false;
   $.each(signlist,function(index,item){
    if(item.signday == day) {
     signed = true;
     return false;
    }
   });
   return signed ;
  },
  drawcal : function(iyear, imonth ,signlist) {
   var mymonth = calutil.bulidcal(iyear, imonth);
   var htmls = new array();
   htmls.push("<div class='sign_main' id='sign_layer'>");
   htmls.push("<div class='sign_succ_calendar_title'>");
   htmls.push("<div class='calendar_month_span'></div>");
   htmls.push("</div>");
   htmls.push("<div class='sign' id='sign_cal'>");
   htmls.push("<table>");
   htmls.push("<tr>");
   htmls.push("<th>" + mymonth[0][0] + "</th>");
   htmls.push("<th>" + mymonth[0][1] + "</th>");
   htmls.push("<th>" + mymonth[0][2] + "</th>");
   htmls.push("<th>" + mymonth[0][3] + "</th>");
   htmls.push("<th>" + mymonth[0][4] + "</th>");
   htmls.push("<th>" + mymonth[0][5] + "</th>");
   htmls.push("<th>" + mymonth[0][6] + "</th>");
   htmls.push("</tr>");
   var d, w;
   for (w = 1; w < 7; w++) {
    htmls.push("<tr>");
    for (d = 0; d < 7; d++) {
     var ifhassigned = calutil.ifhassigned(signlist,mymonth[w][d]);
     console.log(ifhassigned);
     if(ifhassigned){
      htmls.push("<td class='on'>" + (!isnan(mymonth[w][d]) ? mymonth[w][d] : " ") + "</td>");
     } else {
      htmls.push("<td>" + (!isnan(mymonth[w][d]) ? mymonth[w][d] : " ") + "</td>");
     }
    }
    htmls.push("</tr>");
   }
   htmls.push("</table>");
   htmls.push("</div>");
   htmls.push("</div>");
   return htmls.join('');
  }
};
</script>
<include file="public:footer" />

4.后台代码:查询今天是否签到:

$points = m('points_log');
    $userid=session('user.id');
    $begintime=date("y-m-d h:i:s",mktime(0,0,0,date('m'),date('d'),date('y')));
    $endtime=date("y-m-d h:i:s",mktime(0,0,0,date('m'),date('d')+1,date('y'))-1);
    $where=array(
        'points'=>'5',
        'user_id'=>$userid,
        'createtime' => array(array('gt',$begintime),array('lt',$endtime)),
      );
    $res=$points->where($where)->order("createtime desc")->select();
    //var_dump($res['0']['points']);
    $this->assign('res',$res);

5.查询积分:

/*查询积分*/
    $jfen=m(cuser);
    $list=$jfen->where(array('id'=>$userid))->field('points')->find();
    $preg = '/[0]*/';
    $poin = preg_replace($preg, '', $list, 1);
    $this->assign('poin',$poin);

6.签到写入数据库:

/*签到*/
    if(is_ajax){  
      $userid=session('user.id');
      $type='签到';
      $typename='checkin';
      $id_status='up';
      $date=date('y-m-d h:i:s'); 
      $datalist=array(
          'user_id'=>$userid,
          'type'=>$type, 
          'typename'=>$typename,
          'id_status'=>$id_status,
          'points'=>'5',
          'createtime'=>$date,
          'remark'=>'奖励5积分'
          );  
      $points = m('points_log');
      if($points->add($datalist)){
        $log=session('user.id');
        $user=m('cuser');
        $user->where(array('id'=>$log))->setinc('points',5);
      }  
      $this->ajaxreturn($status);
    }

7. /*查询本月签到天数,并以json格式返回*/

public function monthsign(){
    $userid=session('user.id');
    $points = m('points_log');
    $res=$points->where(array('user_id'=>$userid))->select();
    $sign='[';
    foreach($res as $key=>$value){
      $first=explode(' ', $value['createtime']);
      $second=explode('-', $first['0'])['2'];
      if($key==0){
        $sign .= '{"signday":"'.$second.'"}';
      }else{
        $sign .= ',{"signday":"'.$second.'"}';
      }
    }
    $sign .=']';
    $this->ajaxreturn($sign,'json');
  }

php+mysql+jquery实现日历签到功能

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!