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

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

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

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

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

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

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

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

13.10.2009 13:15:23
Похоже, вы знаете, что вам нужно сделать. Какие у тебя проблемы?
Scott Saunders 13.10.2009 13:21:25
3 ОТВЕТА

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

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

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

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

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

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

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

1
13.10.2009 16:16:14
Прежде всего, спасибо за помощь, ребята - я впервые задаю вопрос @ ТАК. Я обычно задаю вопросы экспертам по обмену, но что угодно. Так или иначе, эта проблема для моего друга, и я знаю, что способ, которым он первоначально проектировал свою таблицу, не был нормализован и добавлял то, что могло бы быть в этом другом: коробка не произошла бы так, как он был спроектирован, поэтому я создал новый таблица, tbActivities. Поэтому добавление чего-либо к этому другому: поле и отправка формы ДОЛЖНЫ добавлять все, что у вас было в этом текстовом поле, в таблицу tbActivities - это работает. Еще один комментарий ->
JParsons4 13.10.2009 14:16:00
Что мне интересно, так это то, как я могу ссылаться на каждый из этих флажков, скажем, UPDATE sql позже, чтобы, если один флажок был установлен, но позже он хотел, чтобы он не был проверен, как я могу поместить это в sql, что было изначально например, проверяется на наличие клубники, если теперь он хочет, чтобы этот флажок не проверялся, поскольку tbActivities проходит через цикл while, у каждого из этих флажков нет реального имени. Это так, но я не знаю, как ссылаться на него, потому что он берет текущую строку в tbActivities, добавляет ее к «chk-» в INPUT, и это все.
JParsons4 13.10.2009 14:25:07
Но так как он динамический, как мне узнать, что записать в коде UPDATE, чтобы изменить его? Это касается и всех флажков, извлекаемых из tbActivities. Спасибо за помощь, - эта проблема сводит меня с стены.
JParsons4 13.10.2009 14:25:57

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

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

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

0
13.10.2009 13:38:48

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

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

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

0
13.10.2009 13:41:21