php 实现用户签到,ThinkPHP3.2.3基础上开发的用户签到功能实现

项目需要,自己写的用户签到代码,适合萌新使用,大神勿喷!

本示例没有给用户增加虚拟货币,

方法:<?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 = "首次签到获得了 " . $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 = "签到成功,获得了 " . $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 = "签到成功,获得了 " . $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 ;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值