Если в базе данных есть url=/site/, то как запретить запись в БД url=/site/index.php

Гриша К.

Новичок
Если в базе данных есть url=/site/, то как запретить запись в БД url=/site/index.php

Здравствуйте. Помогите пожалуйста в решение такого вопроса:
Есть каталог ссылок, есть форма для добавления ссылок в каталог, когда пользователь добавляет ссылку в каталог, то она записывается в БД.
Я сделал так, чтобы если url (ссылка) уже есть в БД, то запись заново не происходила:
PHP:
....
 //Извлекается id сайта из таблицы catalogue где url = введенному url
 $query = "select siteid from catalogue where url = '$url'";
 $result = @mysql_query($query); 

  Если url есть в базе данных, то запись заново не идет, ну и пользователь получит сообщение
  if(@ mysql_numrows($result)>0)  
	{
	//$site_id = mysql_result($result, 0, 'siteid');
	$siteid='url';	 
	}	  
  else
    {
...
Но вот проблема, если например в БД есть url = http://site.ru, а пользователь будет вводить url = http://site.ru/ или url = http://site.ru/index.php, то эти url запишутся в БД как новые url.
Я например пробовал делать так:
PHP:
$query = "select siteid from catalogue where url like '"$url"%'";
Но результата нужного нет.
Подскажите пожалуйста решение.
 

Kivsiak

Новичок
Перед вставкой и последующей проверкой приводу урл к нормальному виду.
 

chulim

Новичок
а еще могут быть http://subsite.site.ru != http://site.ru или http://site.ru/~user != http://site.ru
как вариант, можно хранить в базе для каждого урла домен первого уровня, разбирать урл пользователя parse_url(), и сравнивать домен.
 

Гриша К.

Новичок
Kivsiak, chulim спасибо за ответы.
Перед описанным выше кодом, я вставил такой код, которы проверяет есть ли в url символы http://, если нет то код их подставляет.


PHP:
 if (stristr($_POST['url'], 'http://'))
	$url = $_POST['url'];
 else
	$url = 'http://'.$_POST['url'].'/';
[php]

Ну вот щас почитаю про parse-url();

[size=1][i]-~{}~ 04.11.05  13:58:[/i][/size]

Получилось. Вот вариант, если кому пригодиться.

[php]
...
 //Сначала проверяем есть в url символы http://, если нет, то дописываем их.
 if (stristr($_POST['url'], 'http://'))
	$url = $_POST['url'];
 else
	$url = 'http://'.$_POST['url'];

  //Теперь извлекаем из url имя хоста (host)
  $url_ = parse_url($url);
  $host = $url_['host'];

 //И смотрим, если в БД есть url у которого имя хоста = имени хоста введенного url, то это Url записывать не будем.
 $query = "select siteid from catalogue where url like '%".$host."%'";
 $result = @mysql_query($query); 


  if(@ mysql_numrows($result)>0)  
	{
	$site_id = mysql_result($result, 0, 'siteid');
	$siteid='url';	 
	}	  
  else
    {
...
 
Сверху