Выборка из таблицы по условию, которого не существует

tooluz

Новичок
//$url=$_SERVER['HTTP_REFERER'];
$url='http://phpclub.ru/talk/showthread.php?....';
if (preg_match("#([\w]{2,4})(/.*)?$#", $url, $regs));
$domen=$regs[1];
echo "$domen";
 

Sender

Новичок
Автор оригинала: tooluz
ру и пустое поле (роботы) не вносим в базу.
вносим только com, de...

и запрос:
приблизимтельно -
ты кто? - я com.
Иди в базу!
Твой ip в базе? - Да.
На, смотри кино.

А ты кто? - я ру (или никто).
Нечего базу засорять.
Твой ip в базе? - НЕТ.
Кина не будет.
а теперь на php покажи как ты сделал
 

tooluz

Новичок
Весь код:

CREATE TABLE rucom (
dom varchar(10) NOT NULL default '',
ip varchar(20) NOT NULL default '',
UNIQUE KEY New (ip)
) TYPE=MyISAM;

$url=$_SERVER['HTTP_REFERER'];
if (preg_match("#([\w]{2,4})(/.*)?$#", $url, $regs));
$domen=$regs[1];
$ip = $_SERVER['REMOTE_ADDR'];
if ("$domen" != "ru" && "$domen" != null ){mysql_query("insert into rucom (dom,ip) values ('$domen','$ip')");}

$query = db_query("Select * FROM rucom where ip='$ip'");
while ($res = db_fetch_object($query))
if ($ip == "$res->ip")
{echo "com" ;} // ok!
else
{echo "ru";} // условие не выполняется

если убрать фрагмент - ... "$domen" != "ru" && ... - всё ok!
 

Sender

Новичок
tooluz
то есть ты хочешь сказать что даже при пустой таблице тебе выдается "com"?

вставь отладку и смотри что у тебя не так...
echo "com | ip=" . $ip . " | res_ip=" . $res->ip;
 

tooluz

Новичок
то есть ты хочешь сказать что даже при пустой таблице тебе выдается "com"?
ничего не выдаёт - а должен бы выдать - ру.

скорее всего нужно здесь (...FROM rucom where ip='$ip'...)
) что-то изменить (... ip='$ip' and ip = '???').
или полностью изменить констукцию запроса.
 

Zimo

Новичок
Выборка из таблицы по условию, которого не существует - 2

А почему закрыта эта ветка, если ошибка не найдена?
http://phpclub.ru/talk/showthread.php?s=&threadid=96376&rand=26

tooluz, вот ты пишешь "ничего не выдаёт - а должен бы выдать - ру."
Конечно ничего не выдает, всё логично.
Ошибка здесь:

$query = db_query("Select * FROM rucom where ip='$ip'");
while ($res = db_fetch_object($query)) <----
if ($ip == "$res->ip")
{echo "com" ;} // ok!
else
{echo "ru";} // условие не выполняется

Ведь русские айпи в базе не сохраняются, значит при попытке их поиска $query будет пустым, $res соответственно тоже и цикл while даже не стартует - управление сразу передастся за его конец, игнорировав оператор if, в который ты зачем-то и зашил все действия. Твоя ветка else - условие, которое НИКОГДА не выполняется.
Скрипт нужно переделать. Можно просто удалить слово else и всё заработает.

Кроме того, мне кажется, всё криво с самого начала.
Если задача только в том, чтобы отсеять посетителей из зоны .ru, то зачем вообще нужна база айпишников? Если по ним пытаться идентифицировать постоянных пользователей, то завтра с этого айпи зайдет совсем другой человек и чего?
 
Сверху