-5

我是这个网站的新手,我一直在编写一个脚本来阻止来自网站的某些 IP,问题是,它都适用于列中的第一个 IP,例如数据库看起来像这样:

http://gyazo.com/290bc2b9ef77d5b985ddd675ba0c08d1

然后只有第一个 IP,在本例中为 86.70。*。将被重定向到被禁止的页面,如果有人可以帮助我让我的 php 脚本正常工作:

<?php 
mysql_connect("localhost", "root", "password") or die(mysql_error());  
mysql_select_db("bans") or die(mysql_error());  
$query = mysql_query("SELECT * FROM `database`"); 
$row = mysql_fetch_array($query); 
$ip = $_SERVER['REMOTE_ADDR']; //Gets the users IP adress

$deny = array( $row[ip]); 
if (in_array ($_SERVER['REMOTE_ADDR'], $deny)) {
   header("Location: http://gabbo.org.uk/banned.php"); //What page shall the bans be sent to?
   exit(); 
}?>

我会很感激!E.罗西尔

4

3 回答 3

3

逻辑上的微小变化。

<?php 
    mysql_connect("localhost", "root", "password") or die(mysql_error());  
    mysql_select_db("bans") or die(mysql_error());
    $ip = $_SERVER['REMOTE_ADDR'];

    # Full Text Attempt
    $query = mysql_query("SELECT `IP` FROM `database` WHERE `IP` = '$ip'");
    # Wild Card Attempt
    $query = mysql_query("SELECT `IP` FROM `database` WHERE `IP` LIKE '%$ip%'");
    # Use any one query from the above!

    if (mysql_num_rows($query) > 0)
    {
        header("Location: http://gabbo.org.uk/banned.php");
        die();
    }
?>

在职的

当具有 IP 地址的用户192.168.1.1尝试访问您的页面并且您的 MySQL 禁止列表拥有它时,它肯定会返回一些行,这些行大于1. 这样,标头301 Permanent Redirection就向浏览器提供了被禁止页面的信息。

于 2012-09-17T17:48:05.243 回答
0

第一部分是好的,但是拒绝列表应该计算为

$deny = array()
while ($row = mysql_fetch_array($query)) {
 $deny[] = $row['ip'];
}

...比你可以从 if( in_array ) 继续

其他人也是对的,您应该查询数据库是否存在,而不是检索所有内容并在 php.ini 中处理它。

还有一个非常强烈的建议:改用 PDO!

于 2012-09-17T17:47:59.470 回答
0

您应该将 IP 查找放在查询中:

$ip = $_SERVER['REMOTE_ADDR']; //Gets the users IP adress

mysql_connect("localhost", "root", "password") or die(mysql_error());  
mysql_select_db("bans") or die(mysql_error());  
$query = mysql_query("SELECT * FROM `database` WHERE ip='$ip'"); 
$row = mysql_fetch_array($query); 

if ($row) {
   //What page shall the bans be sent to?
   header("Location: http://gabbo.org.uk/banned.php"); 
   exit(); 
}
于 2012-09-17T17:51:07.003 回答