php динамические флажки - PullRequest
       5

php динамические флажки

1 голос
/ 13 октября 2009

В настоящее время у меня есть форма, которая представляет изображение с такими текстовыми полями, как заголовок, описание и другое поле, которое автоинкрементно для imageID, другое область для фактического файла, называемая vfile, и *** другая часть, которая имеет 3 флажка и текстовое поле. Все отлично работает, и это то, что он делает. Представляет данные в базу данных, чтобы они могли перетаскивать информацию на страницу на веб-сайте. Единственная часть, которую я пытаюсь обновить: 3 флажка и текстовое поле. Допустим, первый флажок гласит: яблоки Второе: апельсины Третье: виноград А в другой категории есть пустое текстовое поле, которое, если вы добавите что-то, добавит его в категорию «Другое».

Итак, дизайн базы данных имеет 4 поля: 1 - яблоки, 2 - апельсины, 3 - виноград, 4 - другое.

Когда я нажимаю флажок, он добавляет проверенный флажок в базу данных под правильным, будь то яблоки, апельсины или виноград. Если я добавлю поле в текстовое поле, например: Bannanas, то оно добавит «Bannanas» в поле базы данных vother и покажет это в базе данных.

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

Как я могу иметь другую категорию "Bannanas", поменять на категорию флажков, которую можно было бы выбрать для следующих фотографий, когда я в следующий раз зайду на страницу добавления изображений. Так что, когда я перейду ко второму изображению для отправки, это даст мне возможность не только 3 флажка, но и 4 флажков, чтобы я мог проверить первые 4, «Яблоки, апельсины, виноград, баннаны», а затем поставить слив в другой категории.

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

В любом случае, есть предложения? Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 13 октября 2009

(Похоже, это больше вопрос дизайна базы данных, а не вопрос php, но я могу неправильно понять, что именно вы ищете совет)

Похоже, вы говорите, что эти атрибуты (яблоки, апельсин и т. Д.) Хранятся в виде столбцов в вашей основной таблице; но ситуация, которую вы описываете, звучит больше как тегирование. Как правило, вы должны вести список вещей, которые будут помечены (ваши изображения), и отдельный список всех возможных тегов (это будет таблица, содержащая строки: Apple, Orange, Grape). Ваш пользовательский интерфейс имеет возможность выбрать из существующих тегов (строк в таблице тегов) или добавить новый тег с помощью поля «Другие». Новые теги будут добавлены как новая строка в таблицу тегов. Поскольку теги и тегированные элементы имеют отношение «многие ко многим», вы должны создать третью таблицу (называемую таблицей соединений), в которой хранятся ключи теговых элементов и ключи тегов; таким образом, вы можете легко выбрать любую сторону отношения: получить все теги для данного элемента; получить все предметы с данным тегом.

Это помогает?

(РЕДАКТИРОВАТЬ: для комментариев)

Итак, деятельность звучит как список тегов. Если я хочу показать форму с флажками для всех действий, я могу запросить таблицу действий для них. Каждый из этих флажков может иметь атрибут name или что-то, что фиксирует идентификатор строки, к которой он привязан.

Также я бы выбрал в таблице соединений идентификаторы тегов, которые выбрал мое просматриваемое в данный момент изображение. Поскольку я заполняю список флажков, я могу проверить этот набор результатов, чтобы увидеть, находится ли идентификатор флажка, который я ставлю на странице, в списке тегов для изображения.

Чтобы сохранить это обратно в базу данных при отправке, проще всего, вероятно, (в транзакции) удалить все записи для изображения из таблицы объединения и заменить их новыми записями на основе состояния флажков в форма.

0 голосов
/ 13 октября 2009

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

Вы должны переместить свой список атрибутов из набора полей в записи в список связанных записей в новой таблице. Эта новая таблица требует 2 столбца. Первый - это первичный ключ из существующей таблицы, чтобы вы могли установить связь между таблицами. Второе - это поле атрибутов («Бананы», «Яблоки», «Сливы» и т. Д.). В таблице атрибутов может быть столько записей, сколько вам нужно для каждой записи в основной таблице. Вы также можете не иметь записей атрибутов, если ни одна из них не отмечена.

Этот вид отношений между двумя таблицами называется отношением один ко многим.

0 голосов
/ 13 октября 2009

Бросьте яблоки, апельсины и виноградные колонны.

Создайте вторую таблицу с двумя полями: imageID и itemtype. Не делайте ни один из двух ключей. Теперь вы можете перечислить столько разных типов элементов для каждого изображения, сколько вам нужно. Получить список типов используемых элементов из базы данных будет сравнительно дорого, но если у вас нет миллионов элементов, это не должно быть проблемой. (Mikeb предлагает сохранить список используемых типов элементов в отдельной таблице, чтобы ускорить это.)

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

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