Хранить динамические поля формы в базе данных - PullRequest
2 голосов
/ 20 июля 2010

Я прочитал другие ответы на эту (или, по крайней мере, близкую к этой) теме, но не смог получить четкое представление о ней, поэтому снова прошу помощи.HTML-форму, которую я хотел бы отправить в базу данных с использованием PHP.Форма разбита на несколько вкладок, и в каждой вкладке у меня есть флажки, которые запускают другие части формы.Пример: в какой-то момент в моей форме я получил группу флажков с опциями «hotel» и «restaurant».Если я проверяю отели, я получаю другую часть формы, специфичную для «отелей».То же самое для "ресторана".Так что здесь все очень динамично, и я не знаю, какой будет наилучшим подходом для хранения каждого поля формы в базе данных.Потому что он может содержать 15 полей или 20, в зависимости от выбора.Любой пример будет оценен, так как я не настолько продвинут в проектировании баз данных.

Спасибо!

Ответы [ 2 ]

2 голосов
/ 20 июля 2010

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

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

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

Определите, какие части данных зависят от других частей данных. Например, вы упомянули, что проверка "hotel" может открыть больше полей для этого выбора. Предположим, что это включает в себя такие вещи, как «en-suite», «тип кровати» и т. Д. Тогда у вас должно быть 3 стола, стол регистрации (при условии, что пользователь использует форму для покупки этих услуг), стол отеля и стол Registration_hotel. В регистрационной таблице будет записан ряд деталей, относящихся только к регистрации, таких как имя клиента и уникальный идентификационный номер. Таблица отеля будет содержать информацию, относящуюся только к отелю, например, сколько номеров имеет ванную комнату. Таблица registration_hotel будет содержать детали, относящиеся к этой регистрации в этом отеле. Возможно, вы захотите, чтобы столбец типа bool записывал, запрашивал ли пользователь «en-suite».

При отправке формы, проверьте, какие части пользователь ввел с if(isset($_POST['hotel']) && !empty($_POST['hotel'])). Тогда отправляйте материал только в таблицу registration_hotel, если это условие выполняется.

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

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

0 голосов
/ 20 июля 2010

Вы не указали, как вы можете управлять этой динамической формой. Можете ли вы отредактировать исходный код PHP / HTML? Было бы здорово, если бы вы могли пометить различные переменные, такие как hotel[], restaurant[] и т. Д.

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

Примечание: этот метод работает только тогда, когда вам не нужно искать конкретные элементы в вашей базе данных.

Редактировать: возможно, я неправильно понял вашу проблему.

Вы можете создать таблицу 'metadata' следующим образом:

form_id  |  option_name  | option_value
---------------------------------------
1        |  hotel        | true
1        |  restaurant   | false
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...