我想阻止我创建的数据库中的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();
}
?>
我做错了什么?
答案 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;
}
?>