2015-11-29 2 views
1

Я хочу, чтобы блокировать IP-адрес из базы данных, я создал, и я пытался что-то вроде этого:блокирующие 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

Что происходит? Есть ли сообщение об ошибке? – bnahin

+1

Почему вы запрашиваете 'WHERE id = 1'? – SimoV8

+0

Это все, ничего не происходит. Я использовал свой собственный IP-адрес, и я не перенаправляюсь. –

ответ

0

Ваш запрос SELECT ip FROM blocked_ips WHERE id=1 не будет выбрать более одной строки, если идентификатор является основным ключом. Вы должны использовать SELECT ip FROM blocked_ips (без идентификатора) вместо фактического массива данных.

Логика вы используете:
$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(..))

Но такое решение медленно ... Вы должны быть Выбор из базы данных на основе IP, как предложено VIDesignz ,

<?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_* функции амортизации. Вместо этого используйте mysqli или pdo.

+0

Теперь я понимаю, и попробовал код, который вы дали, и до сих пор ничего не происходит. Я не могу понять, что я сделал неправильно. –

+0

Возможно, вы получаете всплывающие предупреждения в браузере пользователя, что приводит к ошибке «отправленные заголовки» при попытке изменить заголовок местоположения. Может быть, 'error_reporting (0);' поможет. Если нет, пожалуйста, отлаживайте код за один раз. Возможно, запрос является ошибкой, успешно ли вы подключились к базе данных и выбрали базу данных для работы? 'if (! $ result) {echo mysql_error();}' если не повезло с этим, убедитесь, что запрос запущен в phpmyadmin для вашего заданного ip-адреса: 'echo $ _SERVER ['REMOTE_ADDR'];' Убедитесь, что 'echo mysql_num_rows ($ result), 'возвращает" 1 "для заблокированного ip. – Ultimater

+0

Я сделал все, что вы сказали, чтобы убедиться, что он работает. Я попытался отобразить ip, выбранный из базы данных, и отображает «Идентификатор ресурса № 9», а не фактический ip. Вот почему это не работает, я думаю, как я могу это решить? –

2

Почему бы просто не попытаться выбрать сам ip-адрес?

$user_ip = $_SERVER['REMOTE_ADDR']; 

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

Если вы получили результат (> 0), то он существует в базе данных.

0

Добавляя к предыдущему ответу, вы можете выбрать IP-адрес в MySQL и проверить количество возвращенных строк.

<?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(); 
} 
?> 
+0

Это тоже не работает, ничего не происходит, но я понимаю код. –

Смежные вопросы