我需要更多关于脚本的帮助。我从几个例子中拼凑出了以下内容,但在比较结果以及IP地址和时间戳时,我做得不够。目前,如果用户访问我网站上的某个区域超过10分钟,我会尝试将其重定向到另一个页面。
我的MySQL表由以下列组成:
ID,客户_ip,提交时间
这是我当前的代码:
<?php
$ipaddress = $_SERVER["REMOTE_ADDR"];
$link=mysqli_connect("localhost","root","password","visitors");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$query = "SELECT count(`id`) AS 'count' FROM `visits` WHERE `client_ip` = '$ipaddress'
AND 'submitted_time' = CURRENT_TIMESTAMP - INTERVAL 10 MINUTE
LIMIT 1";
$result = mysql_query($link, $query);
if ($result['count'] > 0) {
echo "You have accessed this site in the last 10 minutes -- you are blocked!";}
else
{
echo "You have access";
exit;
}
?>
我应该得到"你在过去10分钟内访问了这个网站"的回复……但我得到了你每次都可以访问。根据我当前的代码,我有什么想法吗?提前感谢!
如果您正在检查他们是否在过去10分钟内访问,您可以在之间使用
$query="SELECT count(id
)AS'count'FROM visits
WHERE client_ip
='$ipaddress'和当前时间戳-间隔10分钟与当前时间戳之间的"提交时间"
尽管这取决于您尝试如何做到这一点的具体情况
有关架构的信息&数据类型不足。假设submitted_time
是DATETIME
或TIMESTAMP
,
你有两个问题。
- submitted_time是一列,因此请删除单引号或使用反勾号
- 使用
<=
而不是=
,用户可以在10分钟以上重新访问 - 不需要
LIMIT 1
。COUNT(*)总是返回1条记录。但这不是问题
下面的查询会很好地工作:
SELECT count(`id`) AS 'count'
FROM `visits`
WHERE `client_ip` = '$ipaddress'
AND `submitted_time` = CURRENT_TIMESTAMP - INTERVAL 10 MINUTE