
![]() |
Здравствуйте Гость ( Вход | Регистрация ) |
|
|
|
![]() ![]() ![]() |
![]() |
|
![]() Пользователь ![]() ![]() Профиль Группа: Пользователь Сообщений: 81 Пользователь №: 46556 На форуме: Карма: ![]() |
Здравствуйте, уважаемые специалисты.
При добавлении новой статьи создается новый файл (без расширения) с именем, которое я беру из названия - $_POST['name']. Так: $url__title = preg_replace("/[^a-z0-9]+/i","_",$_POST['name']); Но если создается статья с названием, которое уже существует, следовательно и файл такой уже существует, то по понятным причинам файл просто перезаписывается. Поэтому я хотел бы, чтобы к файлу (если такой уже существует) добавлялся порядковый номер через тире, то есть так: db/rec/good_news Я пытаюсь сделать это следующим образом: $url__title = preg_replace("/[^a-z0-9]+/i","_",$_POST['name']); Но все равно файл перезаписывается и порядковый номер в конце не добавляется. За недостаточностью знаний в PHP прошу помощи у специалистов. |
![]() |
۩
Дата
|
![]() Пользователь ![]() ![]() Профиль Группа: Пользователь Сообщений: 81 Пользователь №: 46556 На форуме: Карма: ![]() |
Прошу прощения за мою невнимательность. Дело было вот в чем:
while(file_exists('db/rec/'. $fn)){ вот так теперь всё работает как нужно. |
![]() |
|
![]() Здесь живет ![]() ![]() ![]() ![]() ![]() ![]() Профиль Группа: Форумчанин ![]() Сообщений: 6464 Пользователь №: 35718 На форуме: Карма: 208 ![]() |
Kuzma92, это крайне ненадёжный способ. В web нельзя мыслить одним пользователем. Думайте, что в одну секунду к скрипту могут обратиться 100 пользователей. В противном случае у вас будут "пропадать маляры".
https://xakep.ru/2001/06/19/12860/ -------------------- |
![]() |
|
![]() Здесь живет ![]() ![]() ![]() ![]() ![]() ![]() Профиль Группа: Форумчанин ![]() Сообщений: 267 Пользователь №: 43211 На форуме: Карма: 3 ![]() |
Kuzma92, используйте обычную БД и автоинкрементальные числовые id. Если нужны слаги, в многопользовательских системах они обычно объединяются с числовыми id в адресе, например /good_news-1, и роутинг выполняется только по числовой компоненте, а уже потом для исключения анлима дублей страниц сравнивается слаговая компонента.
Если делаете для себя или ограниченного кол-ва пользователей, то просто дубли слагов исключаете за счет объявления этого поля юником. Отлавливаете ошибку дублирующегося ключа и добавляете какое-то число. Последнее можно и без автомата делать, полагаясь на юзеров. Только смотрите, чтобы они не теряли введенный контент при возникновении такой ошибки. Например, в наших системах сначала создается запись с адресным id (допустим слагом), а потом уже добавляется контент. А если надо отредактировать слаг, то для этого в API есть ф-ция переименования. |
![]() |
![]() ![]() ![]() |