php - 使用 MySQL PHP 进行基于时间的 IP block

标签 php mysql arrays

我正在使用 ajax 来存储投票,目前正在尝试为每个已经投票过的 IP 地址提供 18 小时的区 block 。

首先,我将 IP 和时间存储在数据库中,但我似乎无法弄清楚如何检查在我的数组中是否找到 IP,然后与 Ip 关联的时间是否与 18 小时以上匹配.

我对数据库中的每一行使用多维数组。 这是我到目前为止所得到的,但我总是收到 500 或意外的 JSON 错误结束。

 $currentip = $_SERVER['REMOTE_ADDR'];
    $time  = date('Y-m-d H:i:s');
    $exptime = date('Y-m-d H:i:s', strtotime('+18 Hours'));

    // Check IP
    $sqlip = "SELECT ip,exptime FROM `user_ip` ;";
    $storedip = array();
     if ($result = $this->databaseConnection->query($sqlip)){
         while($row = $result->fetch_assoc()) {
             $storedip = array($row['ip'], $row['exptime']);
            }       

      if(in_array($currentip, array_column($storedip, '0'))){
      $key = array_search($currentip, array_column($storedip, 0));

        if($time <= $storedip[$key][1]){
            echo json_encode("IP Block active", JSON_PRETTY_PRINT);
         }
      } 
      else{

         $setip = "INSERT INTO `user_ip` VALUES ('$currentip','$exptime');";
          if($this->executeDatabaseQuery($setip)){
        // Count Vote and do my stuff
          }
         }
     }

最佳答案

您的问题在这里:

$storedip = array($row['ip'], $row['exptime']);

应该是:

$storedip[] = array($row['ip'], $row['exptime']);

关于php - 使用 MySQL PHP 进行基于时间的 IP block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48549231/

相关文章:

javascript - 将数组值移动到另一个特定数组

php - 通过 PHP 修复 MySQL 查询

php - MySQL 查询不检查条件

php - 为什么我不应该在 PHP 中使用 mysql_* 函数?

javascript - 为什么在 Javascript 中尝试使用 Array.includes 作为 Array.filter 的函数时出现错误?

Javascript,用数组过滤数组

php - WebSocket 连接到 'ws://localhost:8080/' 失败:连接建立错误:net::ERR_CONNECTION_REFUSED

php - 在这个阶段从 PHP/MySQL 切换到 .NET 是否值得?

php - Laravel 5.1 如何使用迁移创建 MySQL 存储过程

php - 不允许在 php 中连接到此 MariaDB 服务器