阻止数据库中的IP

时间:2015-11-29 22:43:06

标签: php mysql

我想阻止我创建的数据库中的IP,我尝试过这样的事情:

<?php
$deny = mysql_fetch_array(mysql_query('SELECT ip FROM blocked_ips WHERE id=1'),MYSQL_ASSOC);
if (in_array ($_SERVER['REMOTE_ADDR'], $deny)) {
   header("location: http://www.google.com/");
   exit();
}
?>

我做错了什么?

3 个答案:

答案 0 :(得分:2)

为什么不尝试选择ip地址呢?

 $user_ip = $_SERVER['REMOTE_ADDR'];

 $query = 'SELECT ip FROM blocked_ips WHERE ip=$user_ip';

如果您得到结果(> 0),则它存在于数据库中。

答案 1 :(得分:0)

添加到上一个答案,您可以选择MySQL的IP地址并检查返回的行数。

<?php
$ip = $_SERVER['REMOTE_ADDR'];
$sql = "SELECT ip FROM blocked_ips WHERE ip='$ip'";
if (mysql_num_rows(mysql_query($sql))>0) {
   header("location: http://www.google.com/");
   exit();
}
?>

答案 2 :(得分:0)

如果id是您的主键,则您的查询SELECT ip FROM blocked_ips WHERE id=1不会选择多行。你应该使用SELECT ip FROM blocked_ips(没有id)代替实际的数据数组。

您正在使用的逻辑:
$deny = mysql_fetch_array(mysql_query('SELECT ip FROM blocked_ips WHERE id=1'),MYSQL_ASSOC);
只能返回一行数据,因此无法与之结合: if (in_array ($_SERVER['REMOTE_ADDR'], $deny)) {
因为mysql_fetch_array是在循环中调用以获取所有数据的。

我相信你试图编写的逻辑是针对这样的循环: while($row=mysql_fetch_array(..))

但是这样的解决方案很慢......你应该根据VIDesignz建议的基于ip的数据库进行选择。

<?php
$ip=mysql_real_escape_string($_SERVER['REMOTE_ADDR']);
$query="SELECT * FROM blocked_ips WHERE ip='$ip'";
$result=mysql_query($query);
if(mysql_num_rows($result)>0){
   header("location: http://www.google.com/");
   exit;
}
?>

Buuuuuut,mysql_*函数已弃用。请改用mysqlipdo