根据IP地址和时间戳值重定向用户

时间:2013-11-22 22:57:13

标签: php mysql timestamp

我需要一些脚本的帮助。我从几个例子拼凑了以下内容,但在比较结果和IP地址和时间戳方面,我做得不够。就目前而言,如果用户访问我网站上的某个区域超过10分钟,我会尝试将用户重定向到另一个页面。

我的MySQL表包含以下列:

ID,client_ip,submitted_time

这是我目前的代码:

 <?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分钟内访问了这个网站的回声.....但我得到你每次都可以访问。根据我当前的代码,我有什么想法我做错了吗?提前谢谢!

2 个答案:

答案 0 :(得分:0)

如果您正在检查他们是否在过去10分钟内访问过您可以在

之间使用

$ query =“SELECT count(id)AS'count'FROM visits WHERE client_ip ='$ ipaddress'          AND'relacts_time'BETWEEN CURRENT_TIMESTAMP - INTERVAL 10 MINUTE AND CURRENT_TIMESTAMP

虽然取决于你如何尝试这样做的具体细节

答案 1 :(得分:0)

有关您的架构和信息的信息数据类型不足。假设submitted_timeDATETIMETIMESTAMP

你有两个问题。

  • 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