загрузка файлов изображений и ошибки валидации текстовых полей - кто как решает?

Духовность™

Продвинутый новичок
загрузка файлов изображений и ошибки валидации текстовых полей - кто как решает?

Есть задача - создать интерфейс для добавления статьи, т.е. стандартные текстовые поля + возможность выбрать изображения и прикрепить их к статье.

Сложность, с которой я постоянно сталкиваюсь решая эту задачу заключается в том, что при ошибках заполнения тех или иных текстовых полей, путь к изображению пользователю нужно опять явно указывать. Этот вариант не катит, поэтому предлагается сохранять изображения вне зависимости от того, возникли ли ошибки валидации текстовых полей или нет. Как тут, например: http://www.slando.ru/post/?category_id=14007&type=1

Вот с этим вариантом лично я вижу сейчас массу геморроя и решение мне не очевидно. Хотя бы потому, что информацию об изображении нужно хранить в СУБД, а поскольку статья на этапе ошибки валидации не создана и нам не известен её будущий ID, то изображение придётся класть во временную директорию. Алгоритм получается конкретно сумасшедший и пока крайне не понятный.

Очень удобное решение я делал, когда изображения можно сохранить только ПОСЛЕ добавления статьи и получения ею ID, но это костыль для пользователя.

Кто как решает эту задачу?
 

Beavis

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

Духовность™

Продвинутый новичок
для файлов своя таблица, для статей своя
да кто ж спорит?

связь между ними проставляется после создания статьи
это все понятно и ясно как Божий день.

Вопрос в другом. Алгоритм работы приложения непонятен.
 

Semen

Семён
В случае изображение является частью статьи логично активизировать опцию добавления оного после создания обязательного/ых поля/ей(в моём случае это заголовое/title)
 

Духовность™

Продвинутый новичок
В случае изображение является частью статьи логично активизировать опцию добавления оного после создания обязательного/ых поля/ей(в моём случае это заголовое/title)
ты имеешь в иду, что "логично активизировать опцию добавления оного после создания" записи в базе? Если это так, то я уже описал - это костыль для пользователя - не удобно.
 

Semen

Семён
Это логично, а костыль/не костыль это субъективно.
Нельзя нарисовать на стене не построив её.
 

HEm

Сетевой бобер
http://webeaver.info/i/pics-in-admin.gif

это првеьюшки закачанных картинок, каждой картинке соответствует <input type='hidden' > с именем картинки и запись в таблице связей

новая картинка добавляется через поле аплоада, ненужные удаляются в форме через JS (красный крестик) конкретной картинки и соответствующего ей скрытого инпута, при отправке формы если все ок чистятся старые связи для этой статьи (и, возможно, файлы) и ставятся те что остались в форме

-~{}~ 09.09.10 15:48:

Да-да, тупые юзвери грузят туда bmp, я даже не пищу ;)
 

Фанат

oncle terrible
Команда форума
Не вижу никакой проблемы снаала добавить статью, а потом картинки к ней.

Впрочем, организовать временное хранение с чисткой мусора тоже не вижу особых сложностей.
 

Духовность™

Продвинутый новичок
ну а как это сделать, я не знаю алгоритм

вот если мы делаем временное хранилище, мы должны информацию об этих временных файлах в БД писать или достаточно в hidden-поля поместить их имена?
 

HEm

Сетевой бобер
в таблице связей написаны имена, да

-~{}~ 09.09.10 16:13:

Хотя стоп, я понял мысль. Протупил главный то вопрос... Статья еще не создана, а картинки хотим уже иметь загруженные...

Да, после создания статьи (с техническими всякими параметрами) уже идем на второй этап - ее заполнение
 

HEm

Сетевой бобер
А при заполнении уже все поля - необязательные

-~{}~ 09.09.10 16:17:

Впрочем и в одношаговом варианте вполне катит в случае ошибки писать в спрятанные поля.
Минус в том, что если автор после ошибки откажется от своих намерений файл останется. Но и с этим можно бороться
 

Yuriy_S

-=PHP-Club=-
при этом имена файлов должны быть уникальными на стороне сервера, и в момент, когда возникает ошибка, они должны быть переданы в шаблон для инпутов.
Либо ещё как вариант - генерить уникальный ID, с которым сохранять файлы в таблицу и писать в сессию этот ID, а после добавления статьи уже обновлять ID-ы.
В случае использования сессий файлы не будут теряться, если пользователь случайно перейдет на другую страницу, а затем вернется (иначе понадобится чистильщик этих файлов).
 

prolis

Новичок
В gmail все что не отправлено попадает в "Черновик". Очень удобно его можно всегда редактировать, отправлять либо удалять, со всеми вытекающими плюшками.
 

craz

Нестандартное звание
Слушайте а проблема то не надуманная? Че так сложно сделать статью + картинку и не придумывать себе мегомозгодробительные алгоритмы защиты от дурака?
 

Yuriy_S

-=PHP-Club=-
craz

защита от дурака - это большой плюс любого сайта, т.к. не всегда можно предугадать все действия пользователя, что в свою очередь приводит к различным глюкам.
 

MiksIr

miksir@home:~$
Господи, умеет он из банальной проблемы слона сделать.

Варианта два
1. Валидируй аяксом.
2. Сылка "добавить новое" сразу создает пустую запись в базе и редиректит на edit/<id> - далее понятно, думаю. + сборщик мусора.
3. Хранить где-то файлы и потом при создании их цеплять... но это, имхо, самое некрасивое решение.
 

Духовность™

Продвинутый новичок
craz
причем тут защита? Речь о том, куда, как и в каком виде складировать картинки, принадлежащие к ещё не созданной статье.

1. Валидируй аяксом.
не пойдет

2. Сылка "добавить новое" сразу создает пустую запись в базе и редиректит на edit/<id> - далее понятно, думаю. + сборщик мусора.
это плохая практика.

http://phpclub.ru/talk/showthread.php?s=&threadid=113332&rand=11
http://xpoint.ru/forums/development/analysis/thread/43970.xhtml
 

A1x

Новичок
куда, как и в каком виде складировать картинки, принадлежащие к ещё не созданной статье.
в папку типа articles/YYYY-MM-DD загружать через что-то вроде CKFinder-а
 

KolyaA

Новичок
Сложность, с которой я постоянно сталкиваюсь решая эту задачу заключается в том, что при ошибках заполнения тех или иных текстовых полей, путь к изображению пользователю нужно опять явно указывать. Этот вариант не катит, поэтому предлагается сохранять изображения вне зависимости от того, возникли ли ошибки валидации текстовых полей или нет. Как тут, например: http://www.slando.ru/post/?category_id=14007&type=1
А почему нельзя сохранять этот путь. Ну загрузит пользователь второй раз тоже самое, что в этом страшного?
 
Сверху