【问题标题】:redirecting user based on IP address and timestamp values根据 IP 地址和时间戳值重定向用户
【发布时间】:2013-11-22 22:57:13
【问题描述】:

我需要更多关于脚本的帮助。我从几个示例中拼凑了以下内容,但在比较结果以及 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 分钟内访问过这个网站的回声......但我得到你每次都可以访问。根据我当前的代码,关于我做错了什么有什么想法吗?提前致谢!

【问题讨论】:

  • var_dump($var);print_r($var, true);检查变量的内部
  • 好吧,我终于明白了.. 必须对我的查询进行以下更改: $query = "SELECT count(id) AS 'count' FROM visits WHERE client_ip = '$ipaddress' AND submitted_time

标签: php mysql timestamp


【解决方案1】:

如果您正在检查他们是否在过去 10 分钟内访问过,您可以在这之间使用

$query = "SELECT count(id) AS 'count' FROM visits WHERE client_ip = '$ipaddress' AND 'submitted_time' BETWEEN CURRENT_TIMESTAMP - 间隔 10 分钟和 CURRENT_TIMESTAMP

虽然取决于您尝试如何做的具体细节

【讨论】:

    【解决方案2】:

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

    你有两个问题。

    • submitted_time 是一列,所以去掉单引号,或者使用反引号。
    • 使用&lt;=而不是=,用户可以重访超过10分钟
    • LIMIT 1 不是必需的。 COUNT(*) 总是返回 1 条记录。但这不是问题..

    下面的查询会很好用:

       SELECT count(`id`) AS 'count'
       FROM `visits`
       WHERE `client_ip` = '$ipaddress'
            AND `submitted_time` = CURRENT_TIMESTAMP - INTERVAL 10 MINUTE
    

    【讨论】:

      猜你喜欢
      • 2012-04-12
      • 2020-03-28
      • 2015-03-01
      • 2018-04-05
      • 2019-08-27
      • 2012-04-07
      • 1970-01-01
      • 2019-07-20
      • 1970-01-01
      相关资源
      最近更新 更多