项目需要,自己写的用户签到代码,适合萌新使用,大神勿喷!
本示例没有给用户增加虚拟货币,
方法:<?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 ;