PHP每日簽到及連續簽到獎勵實現示例

數據庫字段php

num 記錄已經連續簽到次數ajax

times 記錄簽到的日期 格式年月日 如 20160101數據庫

PHP代碼以下session

<?php
//獲取今天的日期
$today = date('Ymd');
//獲取簽到記錄
$signInfo = M('table')->field('id,num,times')->where(array('uid' => session('uid')))->find();

if($signInfo['times'] == $today){//今天已簽到過了
    $this->ajaxReturn(array('info' => '今天已簽到過了', 'status' => 0));

}elseif($signInfo['times'] == date('Ymd', strtotime('-1 day'))){//昨天已簽到,連續簽處處理
    if ($signInfo['num'] == 29) {//連續簽到30天,每30天清零
        $num = 0;//連續簽到次數
        $point = 30;//額外獎勵積分數
    }elseif($signInfo['num'] == 20){//連續簽到3周
        $num = $signInfo['num'] + 1; $point = 20;
    }elseif($signInfo['num'] == 13){//連續簽到2周
        $num = $signInfo['num'] + 1; $point = 15;
    }elseif($signInfo['num'] == 6){//連續簽到1周
        $num = $signInfo['num'] + 1; $point = 10;
    }else{
        $num = $signInfo['num'] + 1; $point = 0;
    }
    //更新簽到記錄
    $result = M('table')->save(array('uid' => session('uid'), 'num' => $num, 'times' => $today));

}else{//斷籤或未簽到過,從新計數
    $point = 0;
    if ($signInfo['id']) {//有簽到記錄,更新記錄信息
        $result = M('table')->save(array('uid' => session('uid'), 'num' => 1, 'times' => $today));
    }else{//無簽到記錄,添加一條記錄
        $result = M('table')->add(array('uid' => session('uid'), 'num' => 1, 'times' => $today));
    }
}

if ($result){
    $points = $point + 3;//本次簽到得到的總積分數 = 額外獎勵 + 簽到一次應得的積分數 此處爲3分
    $result = M()->execute('update users set total_point=total_point+' . $points . ',now_point=now_point+' . $points . ' where uid=' . session('uid'));
    if($result){
        $msg = '簽到成功,得到3積分';
        $msg .= $point > 0 ? '<br />連續簽到' . ($num > 0 ? $num : 30) . '天,獎勵' . $point . '積分' : '';
        $this->ajaxReturn(array('info' => $msg, 'status' => 1));
    }
}
$this->ajaxReturn(array('info' => '簽到失敗', 'status' => 0));

 

代碼是根據ThinkPHP框架開發,在項目代碼的基礎上進行了修改,項目代碼運行正常,修改後的上述代碼沒有實際運行過,只做爲開發思路參考框架

相關文章
相關標籤/搜索