2012-03-08 4 views
0

Я попытался создать список запрещенных ip-адресов, в котором хранятся номера ip в mysql. В основном я пытаюсь перенаправить заголовок, если пользовательский ip в массиве, но он не будет работать. Что не так?php header location wont work

$ip_array = array(); 
$ip_ban_query = mysql_query("SELECT ip FROM banned_ips"); 
while ($deny = mysql_fetch_assoc($ip_ban_query)){ 

$add_ip = $deny['ip']; 
$ip_array[] = $add_ip; 

} 
if (in_array ($_SERVER['REMOTE_ADDR'], $ip_array)) { 
    header("Location: http://www.google.com/"); 
    exit(); 

} 
+0

Не перенаправляет ли запрещенные IP-адреса? Разве это не перенаправление вообще? Как именно он «не работает»? У вас есть пробел между 'in_array' и вашей скобкой, но я не уверен, что это важно. – SenorAmor

+0

ничего не происходит, это не перенаправления. –

+0

Ваш код выглядит нормально, вы делаете это на localhost? Является ли ваш $ ip_array ожидаемыми значениями? – arma

ответ

1

Мы можем значительно упростить ваш код здесь .. Сокращение сложности почти всегда сбрасывает ошибки. :)

// There are several different methods to accomplish this, and you really 
// should be using statements here, but both are out of scope of this question. 
$ipBanQuery = sprintf("SELECT ip FROM banned_ips WHERE ip = '%s'", mysql_real_escape_string($_SERVER['REMOTE_ADDR'])); 

$result = mysql_query($ipBanQuery); 
if (mysql_num_rows($result)) { 
    header('Location: http://www.google.com/'); 
    exit(); 
} 

Это также зависит от того, где вы вызываете этот код. Будьте уверены, что это вызывается перед любым выходом в браузер - пробелы, HTML или другая информация об отладке предотвратит отправку любых дополнительных заголовков. Проверьте журнал ошибок вашего веб-сервера, чтобы узнать, есть ли что-то неуловимое.

+0

Прошу прощения за этот глупый вопрос, но я забыл о подключении db до запроса ... Это ошибка работы слишком много :) Большое спасибо. –

+0

Мы все знаем это чувство. Рад, что ты заработал! :) – Morgon