允许用户每小时提交他们提交的输入?

时间:2009-08-06 00:16:05

标签: php mysql database

我希望人们能够“碰撞”他们在我的数据库中写的内容,但同时只允许输入一次在表中。

例如:

吉姆的代码是5555.吉姆输入他的代码,它射到了桌子底部。 34分钟后,他再次尝试输入他的代码(因为其他人已经在现在和之后输入了他们的代码)但显示错误让他知道他有26分钟等待。

Joe输入他的代码并等待一小时五分钟,并且能够将他的代码再次推回到底部。

基本上,我在桌子底部显示数据。

有没有办法轻松做到这一点?

function some_more_custom_content() {

    $output="<BR>";

    ob_start();

    if ($_REQUEST['code'] != "") {
        $code = $_REQUEST['code'];
        $query="INSERT INTO `fc` (`code`,`datetime`) values ('" . mysql_real_escape_string($code) . "', now())";
        $result=mysql_query($query);
        $entry['datetime'] = strtotime($entry['datetime']);

        while ($fetch_array = mysql_fetch_array($result)) {
            $seconds = time() - strtotime($fetch_array["datetime"]);

            if ((time() - $entry['datetime']) < 60*60) {
                echo ("The code " . htmlentities($code) ." was updated less than an hour ago.");
            } else {
                echo ("Inserted " . htmlentities($code) ." into the top.");
            }
        }
?>

我收到语法错误。知道它在哪里吗?

更新:获取错误:

  

解析错误:语法错误,意外$ end

2 个答案:

答案 0 :(得分:2)

您应该在代码字段中创建一个具有唯一索引的表,然后使用如下查询:

INSERT INTO CODES (code) 
  VALUES (555)
  ON DUPLICATE KEY UPDATE lastUpdated = 
               case when NOW() - INTERVAL 5 MINUTE > lastUpdated 
                  then NOW() 
                  else lastUpdated end

这将仅在超过5分钟的情况下更新lastUpdated字段

答案 1 :(得分:0)

不那么难:

为最后一次“碰撞时间”使用时间戳。

输入代码后,检查数据库中是否已存在 如果没有,请插入并将缓冲时间戳设置为now() 如果确实存在,请检查时间戳是否在一小时内。 如果是,则显示错误 如果不是,请将其重置为now()

按缓冲时间戳对显示数据进行排序。

编辑:

$entry = /* get entry from database, assuming the case where it already exists */;

// depending on the format of timestamp you get from the database,
// you may have to convert it to a UNIX timestamp:
$entry['timestamp'] = strtotime($entry['timestamp']);

if ((time() - $entry['timestamp']) < 60*60) { // 60*60 is one hour in seconds
    // display error
} else {
    // reset bump
}