ThinkPHP3.2.3基礎上開發的用戶簽到功能實現

字號+ 編輯: 国内TP粉 修訂: 种花家 來源: ThinkPHP 2023-09-06 我要說兩句(0)

一個基於thinkphp 3.2.3版本的用戶簽到源碼demo

項目需要,自己寫的用戶簽到代碼,適合萌新使用,大神勿噴!

本示例沒有給用戶增加虛擬貨幣,

方法:

<?php
/**
 *用戶簽到方法
 *$user  簽到用戶ID
 *@return $data String
 */
function sign($user = '')
{
    $seedlings  = 20; //第一次簽到贈送樹苗數量
    $seedling3  = 3; //連續簽到天數小於等於3天贈送的樹苗數量
    $seedling8  = 8; //連續簽到天數大於8天贈送的樹苗數量
    $seedling15 = 12; //連續簽到天數大於15天贈送的樹苗數量
    $seedling30 = 18; //連續簽到天數大於30天贈送的樹苗數量
    $sign       = M("signin"); //實例化模型
    $userSign   = $sign->where(array("user_id" => $user))->find(); //用戶簽到數據

    $signId     = $userSign['id']; //用戶在簽到表的id
    $tabletoday = $userSign['today_signin_time']; //簽到表裡的今日簽到時間 不等效與今日時間
    $today      = date("Y-m-d", time()); //今日簽到時間
    $lastday    = $userSign['last_signin_time']; //上次簽到時間

    $st_tabletoday = strtotime($tabletoday); //簽到表裡的今日簽到時間 不等效與今日時間
    $st_today      = strtotime(date("Y-m-d", time())); //序列化今日簽到時間
    $st_lastday    = strtotime($userSign['last_signin_time']); //序列化上次簽到時間

    empty($tabletoday) ? $tabletoday = date("Y-m-d", strtotime("-1 day")) : $tabletoday = $tabletoday; //如果爲空則是第一次簽到,默認上一次簽到爲昨天
    if (!$userSign) {
//首次簽到
        $signArr = array(
            'user_id'           => $user,
            'last_signin_time'  => $tabletoday,
            'today_signin_time' => $today,
            'continue_day'      => 1,
            'seedlings'         => $seedlings, //第一次簽到增送樹苗數量
        );
        $res = $sign->add($signArr);
        if ($res) {
            $data = "首次簽到獲得了<i class='layui-icon'></i> " . $seedlings . "獎勵";
        }
    } else if (($st_today - $st_tabletoday) / 86400 == 1) {
//(今日簽到時間-上次簽到時間) / 86400 == 1;則爲連續簽到
        if ($userSign['continue_day'] <= 3) {
            $seed = $seedling3;
        } else if ($userSign['continue_day'] > 8) {
            $seed = $seedling8;
        } else if ($userSign['continue_day'] > 15) {
            $seed = $seedling15;
        } else if ($userSign['continue_day'] > 30) {
            $seed = $seedling30;
        }
        $signArr = array(
            'id'                => $signId,
            'last_signin_time'  => $tabletoday,
            'today_signin_time' => $today,
            'seedlings'         => $seed,
        );
        $res = $sign->save($signArr);
        if ($res) {
            $sign->where(array("id" => $signId))->setInc("continue_day");
            $data = "簽到成功,獲得了<i class='layui-icon'></i> " . $seed . "獎勵";
        }
    } else if (($st_today - $st_tabletoday) / 86400 > 1) {
//(今日簽到時間-上次簽到時間) / 86400 > 1;連續簽到中斷
        if ($userSign['continue_day'] <= 3) {
            $seed = $seedling3;
        } else if ($userSign['continue_day'] > 8) {
            $seed = $seedling8;
        } else if ($userSign['continue_day'] > 15) {
            $seed = $seedling15;
        } else if ($userSign['continue_day'] > 30) {
            $seed = $seedling30;
        }
        $signArr = array(
            'id'                => $signId,
            'last_signin_time'  => $tabletoday,
            'today_signin_time' => $today,
            'continue_day'      => 1,
            'seedlings'         => $seed,
        );
        $res = $sign->save($signArr);
        if ($res) {
            $data = "簽到成功,獲得了<i class='layui-icon'></i> " . $seed . "獎勵,上次簽到時間:!" . $tabletoday . ",本次簽到時間:" . $today . "連續簽到中斷了。";
        }
    } else {
        $data = "今日已簽到!";
    }
    return $data;
}

數據表:

--
-- 表的結構 `tr_signin`
--
CREATE TABLE IF NOT EXISTS `tr_signin` (

  `id` int(255) NOT NULL AUTO_INCREMENT COMMENT 'id',

  `user_id` int(255) NOT NULL COMMENT '用戶id',

  `last_signin_time` varchar(24) NOT NULL COMMENT '上次簽到',

  `today_signin_time` varchar(24) NOT NULL COMMENT '今日簽到',

  `continue_day` int(8) NOT NULL COMMENT '連續簽到天數',

  `seedlings` int(8) NOT NULL COMMENT '獎勵樹苗',

  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=18 ;


閲完此文,您的感想如何?
  • 有用

    1

  • 沒用

    1

  • 開心

    1

  • 憤怒

    1

  • 可憐

    1

1.如文章侵犯了您的版權,請發郵件通知本站,該文章將在24小時内刪除;
2.本站標注原創的文章,轉發時煩請注明來源;
3.交流群: 2702237 13835667

相關課文
  • mac開發接入微信公衆號接口返回報錯 cURL error 56: SSLRead() return error -9806

  • PHP的換行符是什麽

  • pecl安裝程序時報錯Array and string offset access syntax with curly braces is no longer supported

  • 由於商家傳入的H5交易參數有誤,該筆交易暫時無法完成,請聯繫商家解決

我要說說
網上賓友點評