基本上,我正在开发一个垃圾邮件检测系统,我想要检测是否在x秒之前插入了一行。X可能是5秒,所以我想看看是否在不到5秒之前向表中插入了一行。
出于示例目的,表名可以是my_table。这是我想出来的..。
$spam_validate = mysql_query("select * FROM my_table WHERE date_time < '3'");然后我会做..。
if (mysql_num_rows($spam_validate)==0) {
//keep going
} else {
echo 'Spam was detected';
}如果你们中的任何人能在这里给我指出正确的方向,我显然是不正确的,所以非常感谢任何帮助。
发布于 2011-12-28 07:56:58
发布于 2011-12-28 08:04:26
在数据库中插入一个时间戳,然后在接受用户输入时,获取时间戳并检查他们的最后一次post时间加上X秒(或者节流,也许是更好的词)是否小于或等于当前的时间戳。
下面是一个伪代码示例:
X = post_limit;
if((last_post_time + X) <= current_time)
{
allow_to_post;
}
else
{
do_not_allow_to_post;
}下面是我在imageboard软件中使用的一段代码,它可能也会为您指明正确的方向:
<?php
$ip = $_REMOTE['SERVER_ADDR']; // client's IP address
$sql = "SELECT time FROM spam WHERE ip = '$ip' LIMIT 1";
$query = mysql_query($sql);
if(0 < mysql_num_rows($query))
{
while($result = mysql_fetch_assoc($query))
{
if($result['time'] < $time)
{
$sql = "DELETE FROM spam WHERE ip = '$ip'";
$return_val = mysql_query($sql);
}
}
}
else
{
$sql = "INSERT INTO spam (ip,time) VALUES ('$ip','$time');";
$return_val = mysql_query($sql);
}
?>发布于 2011-12-28 08:04:47
您的表应该有一个timestamp类型的列(我们称之为inserted_at)。插入查询将如下所示:
INSERT INTO tbl (inserted_at, somecol, someothercol) VALUES (NOW(), 'whatever', 76)...and你的校验码看起来像这样
$interval = 5;
$sql = "SELECT count(*) AS denied FROM tbl WHERE inserted_at > NOW() - $interval";
$spam_validate = mysql_fetch_array(mysql_query($sql));
if ($spam_validate['denied']) {
echo 'Spam was detected';
} else {
// keep going
}https://stackoverflow.com/questions/8650496
复制相似问题