Запись HTTP_REFERER только с определенных доменов.

que_bunt

Новичок
Запись HTTP_REFERER только с определенных доменов.

Здраствуйте!
есть такая задача: если пользователь приходит с доменов, записаних в базе, то делаем об этом запись в базе.

у меня поэтому поводу несколько вопросов:

формат представления домена в базе: host.ru
а формат $_SERVER["HTTP_REFERER"] как я понял: http://host.ru/parameters=a&other
соответственно надо со строки "http://host.ru/parameters=a&other" выбрать только host.ru
я пока делаю вот так:
PHP:
$referre=$_SERVER["HTTP_REFERER"];
$referre=substr($referre,7,30);//удаляем http://
$n=strrpos($referre,"/");
$referre=substr($referre,0,$n);//удаляем все параметри

if ($referre!=='') {
	$sql="SELECT * FROM domains WHERE name='{$referre}'";
	$mysql_result=mysql_query($sql) or die(mysql_error());
	$row=mysql_fetch_array($mysql_result);
	$row['referres']=$row['referres']+1;
	$sql="UPDATE domains SET referres='{$row['referres']}' where id='{$row['id']}'";
	mysql_query($sql) or die(mysql_error());
}
но вот если например рефер будет вида http://www.host.ru то это уже не сработает
или рефер такого вида не приходит?
возможно мне стоит использовать регулярние выражения? если да, то дайте название функции которая бы брала в параметры рег. выражение и строку, а возвращала подстроку которая подходит этому выражению.

а также хотел спросить в чем может быть проблема выше приведенного кода? просто почемуто поле referres которое отвечает за количество посещение з даних доменов ростет само по себе, причем для всех доменов поле содержыт одинаковое число, например 33 или 17 :-(. откуда оно берется без понятия.
 

white phoenix

Новичок
> со строки "http://host.ru/parameters=a&other" выбрать только host.ru
[m]parse_url[/m]
> а также хотел спросить в чем может быть проблема выше приведенного кода?
Как минимум SQL-инъекция (уязвимость такая).
Зачем SELECT делать? Можно сразу UPDATE `domains` SET `referres`=`referres`+1 WHERE `name`='{$referre}'
 

que_bunt

Новичок
спасибо.
счас посмотрю на parse_url

насчет иньекции, то я что-то не подумал что рефер можно подделать.
Зачем SELECT делать?
О! точно! торможу, просто опыта мало. :(

-~{}~ 29.01.06 23:47:

Спасибо white phoenix!
Все упростилось и глюк исчез.

Получился вот такой код:
PHP:
if (IsSet($_SERVER["HTTP_REFERER"])) { $referre=parse_url($_SERVER["HTTP_REFERER"]); }
else $referre['host']='';

if ($referre['host']!=='') {
	$referre['host']=mysql_real_escape_string($referre['host']);
	$sql="UPDATE `domains` SET `referres`=`referres`+1 WHERE `name`='{$referre['host']}'";
	mysql_query($sql) or die(mysql_error());
}
 
Сверху