Форум → Программирование → PHP для идиотов → Форма для нормализованной таблицы
Форма для нормализованной таблицы
-
Есть таблица Заказы. В ней поле Товар. Там числа - 1, 2, 3. Числа соответствуют записям в другой таблице: 1 - Молоток отбойный (ТЭМЗ) МО-3Б, 2 - Молоток отбойный (ТЗК) МОП-4, 3 - Бетонолом (ТЭМЗ) Б-1.
При заполнении формы пользователю надо показывать не числа, а реальные наименования товаров. Если список товаров небольшой, можно просто давать select: пользователь прокручивает и выбирает нужное значение (а на сервер отправляется option value). Но что делать, если в одном списке товаров - 1000?
Select с 1000 элементов - неудобно. Можно выдавать список Аяксом, как подсказки в ПС (список изменяется по мере ввода букв). И вот главный вопрос: как в этом случае организовать передачу в серверную таблицу числа (ключа), а не строкового значения?
Когда пользователь выберет нужный товар, в поле (input) попадёт строка с наименованием этого товара (некрасиво ведь, если пользователь будет видеть вместо выбранного товара число?). Варианты, как и где заменить наименование ключом я вижу примерно следующие:
1. Вставлять в input сразу числовой ключ, пофиг.
2. Оставлять в поле input строку, создавать рядом скрытый input с числом.
3. Передавать на сервер строковое наименование, там перед вставкой в таблицу заменять наименование ключом.
4. Делать МНОГО select'ов: вообще не использовать длинные списки, всё дробить паровым молотом на мельчайшие части: завести в разделе "Пневмотехника" отдельную подрубрику "Молотки отбойные", если она окажется длинной, завести в ней под-подрубрики "Молотки отбойные ТЭМЗ", "Молотки отбойные ТЗК", …
5. Делать select с over 1000 элементов, пофиг. Там ведь тоже по мере набора букв (очень быстрого набора букв! :-)) список прокручивается.
6. Денормализовать всё нах! :-) Хранить в таблице Заказы готовые (строковые) наименования товаров.
Чаще всего я использую п. 3. Могу иногда использовать п. 6. Во всех случаях, конечно, приходится проверять на сервере, есть ли значение в "словарной" таблице (и возвращать при необходимости "Выберите значение из списка").
Интересно, кто как решает эту проблему?
p.s. Не нашёл, в какой раздел форума добавить тему. Вроде как PHP тут не особо важен. Но не в javascript же?.. -
Май 19, 2012, 4:59 п.п., спустя 1 час 14 минут 3 секунды
Если элементов не слишком много (500-700), то я в таких случаях пользуюсь jquery mobile, там встроенный компонент фильтрации больших списков. А так, да - поиск, желательно поиск вручную + возможность выбора из категории. Во всплывающем окне. Без javascript тут конечно не обойтись. -
Май 20, 2012, 6:15 д.п., спустя 13 часов 16 минут 29 секунд
На практике заказчик идет не из формы заказа в список товаров, а наоборот. Сначала через категории и списки-из-нескольких-страниц добирается до нужной позиции, затем кладет её в корзину. Или через поиск находит и добавляет. Так что проблема со слишком большими списками решается сама собой.Спустя 29 сек.Не надо изобретать сферического коня )ιιlllιlllι унц-унц -
Авг. 18, 2012, 11:33 п.п., спустя 90 дней 17 часов 17 минут
АНЯ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Пожалуйста, авторизуйтесь, чтобы написать комментарий!