对于我们最近的项目,我们需要包含一个基于日期的计数器。
例如,answer.php的页面视图计数器在名为counter
的mysql表中设置。
answer.php
的每日访问次数限制为150次(网页浏览量)。表counter
将存储每个访问权限,当每日允许权150结束时,它会发出警告,表明您已超出限制并阻止显示。
但我无法弄清楚每天如何做到这一点。我的意思是当第二天开始计数器如何重置并从0开始。
答案 0 :(得分:2)
curdate函数返回当前日期,所以类似于:
$sql = "SELECT count(*) from logintable where 'logindate' = CURDATE()";
我意识到你的查询可能涉及更多的表和字段。这是一个非常简单的我头脑中未经测试的回复,我不确定它是否有效。只是在这里大声思考。
答案 1 :(得分:0)
@stefgosselin的答案是你想要做的第一件事;那么如果计数是< 150,插入一行。如果计数为150或更多,请拒绝查询并告诉他们已达到阈值。
答案 2 :(得分:0)
每位用户150页???或总不管是谁。如果是每个用户,那么它应该像向该用户的记录添加单个计数器一样简单,并且每次有可数的“请求”进入时保持增加,并根据需要查看该计数以防止结果受限制。
然后,由于用户无法在每天开始时(即使通过某些触发器)回溯他/她的请求,您只需更新您的表格以将所有计数重置为零... < / p>
更新UserLoginTable设置RequestCount = 0
完成。
答案 3 :(得分:0)
您创建一个名为loginlog的表(所有登录的日志)
table loginlog
id integer autoincrement primary key
user_id integer
logindate date
logincount integer
唯一键userdate
(user_id,logindate)
接下来,在表格上创建一个更新前触发器
DELIMITER $$
CREATE TRIGGER bu_loginlog_each BEFORE UPDATE ON loginlog FOR EACH ROW
BEGIN
/*Force an error by selecting from a non-existing table*/
/*this will prevent the update*/
IF new.logincount > 150 THEN SELECT * FROM create_error_only_150_logins_allowed
END $$
DELIMITER ;
在您的PHP代码中执行以下操作:
INSERT INTO loginlog (user_id, logindate, logincount)
VALUES ('$user_id',curdate(),1)
ON DUPLICATE KEY UPDATE logincount = logincount + 1
测试插入是否成功。
如果插入/更新失败,则您的用户已登录&gt; 150次,你可以拒绝用户。
这样每位用户每天只能保留一条记录。您甚至可以在x天后从登录日志表中清除过去几天。
答案 4 :(得分:-1)
您需要一个将日期映射到网页浏览的表格