每天设置一个柜台

时间:2011-05-31 13:15:18

标签: php mysql

对于我们最近的项目,我们需要包含一个基于日期的计数器。

例如,answer.php的页面视图计数器在名为counter的mysql表中设置。

answer.php的每日访问次数限制为150次(网页浏览量)。表counter将存储每个访问权限,当每日允许权150结束时,它会发出警告,表明您已超出限制并阻止显示。

但我无法弄清楚每天如何做到这一点。我的意思是当第二天开始计数器如何重置并从0开始。

5 个答案:

答案 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)

您需要一个将日期映射到网页浏览的表格