你可能会用到:
mktime 函数,这个函数是构筑时间戳的,它的参数可以从右向左依次省略。省略的参数将会默认为本地时间。如:mktime(0,0,0) 这样就取到了今天0点的时间戳。
time 函数,取当前时间的时间戳,这个函数没有任何参数。
给你一点实现的思路吧:首先由于是签到,所以必须要得到签到人的信息,这里可以用登陆来解决。
在HTML
页面上显示一个按钮,用户点击一下,就将用户的信息,当前系统的日期,存到mysql中。表示用户已经签到了。
签到要得到时间,前端可以使用一个jquery插件叫:
datepiker,这个插件可以稍微改进一下,用来显示用户那些日期签到过。
具体的签到规则是管理员在后台配置,每次连续签到的天数 然后赠送积分或者其他一些优惠,还要设置每人是否领取一次。
主表是签到基本设置
规则是副表
然后用户签到是一张表。现在纠结在如何去判断用户是否领取过。
是否还要添加一张表?
评论 (1) • 分享 • 链接 • 2015-10-18
0
签到表
CREATE TABLE `signin` (
`id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, # ID
`cid` INTEGER UNSIGNED NOT NULL , # 角色ID
`signstatus` SMALLINT(1) NOT NULL DEFAULT 0, # 当天是否签到 0-未签到 1-普通玩家已签到 2-vip玩家已签到
`signdatetime` DATETIME DEFAULT '2012-01-01 12:12:12',# 签到时间
`signtimes` SMALLINT NOT NULL DEFAULT 0, # 当月签到天数
PRIMARY KEY (`id`),
FOREIGN KEY (cid) REFERENCES characters(cid) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8– kolnick 2015-11-25
1个答案 票 数
yunzl
0 票
yunzl6
如果你非要省张表
那就添一列储存数字的
然后我们来玩玩2进制
给你一串二进制,你怎么算成十进制?
1000 == 2^3 =8
0100 == 2^2 =4
0010 == 2^1 =2
0001 == 2^0 =1
(任何非0的0次冥为1)
也就是说 1111 = 2^3 + 2^2 + 2^1 + 2^0 = 15
可能你会说卧槽这跟我的要求有什么关系
你不觉得 未领取or已领取很贴二进制么。。。
0为未领取 1为已领取
好我们继续
假设我们有4个领取活动
第一个 新人领取活动
第二个 100天签到领取活动
第三个 200天签到领取活动
第四个 300天签到领取活动
新人注册了个号,点开了领取页
服务器在签到表里取出了我让你添加的那列
是0
代码机械的处理了起来
首先转成2进制,还是0
""切割每个字符得到数组a
比如我们想知道这个新人的 第一个 任务有没有领取
那就判断
$a[count($a)-1]是否空字符,空字符就等于没领取(php取数组数量应该是count吧)
不是空字符再判断是不是0,是0就等于没领取
是1就是领取过了
同理$a[$a.Length-2]就是第二个任务,$a[$a.Length-3]就是第三个任务
那么如何写回去呢
新人看那个新人任务没领取过,于是点了一下
服务器同样取出这个数字,转2进制,切割,判断$a[count($a)-1]是不是没领取,
既然没领取那咱么就发奖励吧
运行完发奖励的程序后,开始写入领取信息
$a[count($a)-1]=1//嗯,1就是领取过了,然后
$i=count($a)
$num=0//算总数的变量
while(i){//i为真则循环,0不算,所以到i=0就不会运行了
i--//现在$a[i]==$a[count($a)-1]了
if($a[i]){//必须为真才能运行,而空白和0都不为真,所以建议0为未领取
$num+=pow(2,i)//php的算次冥应该是这个吧
}
}
echo $num//存上,打完收工
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)