[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: уникальная ссылка
maximka787
Ребят, привет, подскажите. Я уже тему создавал давно, но тагда не особо разобрался, а сейчас немного даже другое. Мне надо создать уникальный адрес для статей. То есть человек создал тему и она не в виде ID а в виде 8-ми буквенного слова сгенерированного случайно. (www.site.ru/kfgvDjhe/)
Вот одна единственная таблица сайта.
id int insigned primary key auto_increment, 
text text,
link char(8) UNIQUE

Как удобней и быстрей сгенерироать уникальную link?
Cначала задаем случайное значение буквенный rand (8,8), а потом надо проверять со всеми записями вдруг копия будет, а это глупое решение. Мне советовали auto_increment на поле link, но у меня буквенное значение и да и есть уже auto_increment в поле id и выдает ошибку.




Спустя 7 минут (3.10.2011 - 12:23) Winston написал(а):

Спустя 5 минут, 49 секунд (3.10.2011 - 12:29) m4a1fox написал(а):
maximka787
Если уникально! Я например так делаю!

public $abc = 'abcdefghijklmnopqrstuvwxyzABSCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
public function RandomLink() {
$link = substr(str_shuffle($abc), 0, 8);
return $link;
}

Спустя 12 минут, 28 секунд (3.10.2011 - 12:41) Zerstoren написал(а):
А взять текст с заголовка страницы, сделать транслитерацию, после чего проверить в базе такой url и вставить?
Если данный url занят - то добавить в конец "-1"

И не генерируйте случайные ссылки.
Во первых - это не ЧПУ, а каша
А во вторых поисковые системы не оценят.

Возьмите логику:
1) Пользователь забил урл сам
2) Если нет, то транслитерировать заголовок страницы
3) Если заголовок не заполнен, то сделать поле require
4) На крайняк выдрать 2-3 слова с начала текста


Спустя 21 час, 42 минуты, 47 секунд (4.10.2011 - 10:24) maximka787 написал(а):
Спасибо, сама генерация URL это совсем не суть вопроса. Главное его уникальность.
А подскажите, мне на будущее, если вдруг решу плюсовать, то так верное решение?
$url = $_POST['url'];
function create_url($url){
$result = mysql_query("select * from `tab` where `url` = '$url'");
if(mysql_num_rows($result)>0)
{
$url = $url+1;
create_url($url);
}
else
{
return $url;
}
}

Спустя 1 час, 2 минуты, 29 секунд (4.10.2011 - 11:26) Zerstoren написал(а):
Все правильно, только замените
select *
на
select id

даб не выбирать кучу мусора с БД.

Спустя 24 минуты, 8 секунд (4.10.2011 - 11:50) Zerstoren написал(а):
А еще в конец SQL запроса можете добавить LIMIT 1
Еще быстрее будет, если будет дубль

Хотя чуть детальней поработайте с место где идет модификация ссылки на уникальность, мне кажется, может произойти рекурсия.

Но так должно заработать нормально

function create_url($url , $modificator = 0){
$result = mysql_query("select * from `tab` where `url` = '$url'");
if(mysql_num_rows($result)>0)
{
$url = $url . '-' . (++$modificator);
return create_url($url , $modificator);
}
else
{
return $url;
}
}


create_url('url' );




_____________
..Работает - не трогай!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.