我希望人们能够“碰撞”他们在我的数据库中写的内容,但同时只允许输入一次在表中。
例如:
吉姆的代码是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
答案 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
}