[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Добавление в базу translit без дубликатов
linklink26
Делаю добавление страниц в базу, урл строятся на основе транслита, так что он уникален. Но при добавлении одинаковых названий мне все равно нужно добавлять страницы в базу.

Я думал сделать так - добавляем, если такой транслит уже есть, пишем к нему в конце rand(1,10), но если снова такую же запись напишут и ранд будет такой же, будет ошибка.

Как лучше сделать?
alted
id записи добавлять к урл?
linklink26
Ну а что, вполне, так проще всего)
Invis1ble
если у тебя дублируются таким образом данные, то стоит почитать про нормализацию БД.

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

linklink26
Invis1ble Ну а что там с нормализацией? Вот у меня есть записи, нужно чтобы строились текстовые url, все хранится где нужно. Есть поле translit туда помещается транслит названия, он же в урле. Если запись такая же то вот мы и получаем дубль, поэтому проблему мы решаем, тут нормализация мне кажется не сильно поможет.
Arh
Зачем делать выборку по длинному имени? И вообще по текстовому полю в таблице.
Я обычно использую id для таких дел.
Например если есть чпу:
<a href="http://site.ru/link/{$id}-{$translite}.html">Ссылка</a>

А в php
$id = (int)$_GET['link'];

Во первых выборка быстрей
Во вторых вам не надо будет думать про sql инъекцию
В третьих ссылку можно сделать какого угодно вида, как в примере я добавил .html


_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
linklink26
Arh, отлично, а если в транслите будет число?) Я забыл сказать что страницы и их транслит создают посетители сайта. Элементы это отзывы о товарах. И их заголовки превращаются в транслит. Урл нужен как вы правильно заметили Чпу. Вот и думаю а если его назовут "страница35" тогда у меня вместо айди 1 будет ай ли 135.

Да и еще, страницы Без id выглядят красивее чем с id.

Например добавили мне объект "сбербанк" а у меня урл будет /banks/697-sberbank/ ?)
Arh
Цитата (linklink26 @ 4.10.2013 - 18:31)
Arh, отлично, а если в транслите будет число?) Я забыл сказать что страницы и их транслит создают посетители сайта. Элементы это отзывы о товарах. И их заголовки превращаются в транслит. Урл нужен как вы правильно заметили Чпу. Вот и думаю а если его назовут "страница35" тогда у меня вместо айди 1 будет ай ли 135.

Да и еще, страницы Без id  выглядят красивее чем с id.

Например добавили мне объект "сбербанк" а у меня урл будет /banks/697-sberbank/    ?)

(int) работает иначе, просто потестируйте.

$a = '1-abcd';
echo (int)$a;
$a = '1-ab31351';
echo (int)$a;
$a = '1-5161351';
echo (int)$a;


Берётся первое число, так что в транслите может быть что угодно.
И если ссылка будет "1-страница35" , то (int)$_GET['link'] будет 1

Кстати головная боль по поводу уникальных имён ссылок тоже будет не уместна.

ссылки
http://site.ru/link/1-siski.html
http://site.ru/link/2-siski.html
http://site.ru/link/4-siski.html
http://site.ru/link/3-siski.html
будут разными :D

Цитата
Например добавили мне объект "сбербанк" а у меня урл будет /banks/697-sberbank/ ?)


Имхо: Главное что бы человек понял что это "сбербанк" id в ссылке людей ни как не смущает, вы вообще на этом форуме смотрели когда то на ссылки?
/index.php?&act=ST&f=97&t=77018
;)
Или посмотрите на ссылки яндекс маркета, ну или гугл поиска
https://www.google.ru/search?q=%D1%8B%D1%8B%D0%B0%D0%B2%D1%8B&oq=%D1%8B%D1%8B%D0%B0%D0%B2%D1%8B&aqs=chrome..69i57j0l5.969j0j8&sourceid=chrome&espvd=210&es_sm=122&ie=UTF-8#es_sm=122&newwindow=1&q=%D1%81%D1%81%D1%8B%D0%BB%D0%BA%D0%B0


id есть везде, серия телефона samsung 5620, стиральная машина Electrolux EWM 1042 EDU, лада ваз 2106

_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
linklink26
Понял вас, хорошая идея.

Я просто ориентировался на уже реализованные проекты с отзывами, например есть на одном проекте отзыв от посетителя

http://irecommend.ru/content/nasha-prichina-vsekh-radostei

я зарегился и создал такой же, получилось

http://irecommend.ru/content/nasha-prichina-vsekh-radostei-0

вот и думал как бы сделать похоже, чтобы дубли превращались в -(n)

По поводу инъекций, можно же по полученному имени транслита получить запись, просто обработав его через всякие там


$value = str_replace('\\','\\\\',$value);
$value = quoteSmart($value);
$value = addcslashes($value, '_%');
return trim($value, "'");


Arh
Есть другой вариант
crc32
функция преобразует ваши ссылки в уникальный id (9 значный если мне не изменяет память)
$id = crc32($_GET['link']);

Это я так, для расширения кругозора =)

_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
linklink26
Arh спасибо, обязательно почитаю =)
Быстрый ответ:

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