Разбор массива, который содержит входные имена и значения обратно в форму только для чтения
Предыстория: я собираюсь сохранить данные форм ColdFusion в массив и сохранить этот массив в столбце базы данных. Единственное, что я буду делать с этим массивом, - это вызов базы данных для данных и синтаксический анализ их обратно в мою форму, но только для чтения. Массив будет содержать как входное имя, так и значение.
Вопрос: В ColdFusion после того, как я запросил базу данных для данных массива, какой будет лучший процесс для анализа данных обратно в мою форму? Должен ли я воссоздать свою форму в цикле? Или я могу нацелиться на входы и добавить значения, так как я буду знать их имена?
Также есть ли смысл сохранять данные как сериализованные данные JSON в массив, созданный с помощью ColdFusion?
****РЕДАКТИРОВАТЬ***
Ниже приводится схема рабочего процесса моих данных. Некоторые из этих предметов по запросу клиента.
Пользователь заполняет форму с 65 входами.
При отправке все данные формы хранятся в массиве, который добавляется в базу данных. В базу данных также добавлены следующие данные. Уникальный числовой идентификатор, дата отправки, идентификатор пользователя, который отправил форму (извлекается из переменной Session), и, наконец, статус "не назначен" добавляется в базу данных.
Администратор проверяет очередь на отдельной странице. Эта простая очередь извлекает все отправленные формы, которые все еще находятся в состоянии "не назначено". Массив не используется в этой очереди.
Если администратор выбирает одну из записей в очереди, следующая страница загружает точно такую же форму, но я буду использовать массив для заполнения значений в форме и установки всех полей только для чтения. Администратору буквально нужно только скопировать и вставить значения из полей формы в другую систему. (Да, я знаю, это звучит скучно, но для этого конкретного клиента нет другого выбора, и это на самом деле лучше, чем процесс, который они используют в настоящее время.)
Данные массива буквально никогда не будут использоваться ни для чего иного, кроме как для проверки того, что все данные собраны.
Данные массива всегда должны быть загружены целиком и никогда не будут изменены после отправки.
Надеюсь, это поможет понять, почему я задаю эти вопросы. Спасибо
1 ответ
Во-первых, что значит панкадж.
Вы можете сделать что-то вроде этого. Допустим, я храню льготные аспекты автомобиля. Хонда Аккорд 1997 Вы можете хранить данные об этом, как это.
Автомобили Стол
CarID (PrimKey) | Make | Model | Year
--------------------------------------------
47 | Honda | Accord | 1997
48 | Chevy | Malibu | 2005
И тогда я могу иметь отдельную таблицу под названием CarSpecs
SpecID (PrimKey) | CarID | SpecName | SpecValue
-----------------------------------------------
1001 | 47 | Color | Red
1002 | 47 | Transmsn | Auto
1003 | 47 | Doors | 4
1004 | 48 | Color | Green
1005 | 48 | Transmsn | Manual
Вы также можете хранить (Make, Model, Year) в этой таблице, но допустим, что вы этого не сделали.
Вы вставляете что-то вроде этого..
(Если вы не используете cfqueryparam, пожалуйста, посмотрите его, он защищает от SQL-инъекций, распространенной формы взлома.)
<cfquery name="NewCar">
insert into Cars(Make, Model, Year)
values(<cfqueryparam value="#form.make#" cfsqltype="cf_sql_varchar">,
<cfqueryparam value="#form.model#" cfsqltype="cf_sql_varchar">,
<cfqueryparam value="#form.year#" cfsqltype="cf_sql_integer">)
</cfquery>
<cfset DeletedFields = "make,model,year,submit_button,tos_agree">
<cfloop list="#form.fieldnames#" index="df">
<cfif not listfind(deletedfields,df)>
<cfquery>
insert into CarSpecs(CarID,SpecName,SpecValue)
values(<cfqueryparam cfsqltype="cf_sql_integer" value="#NewCar.generatedKey#">,
<cfqueryparam cfsqltype="cf_sql_varchar" value="#fn#">,
<cfqueryparam cfsqltype="cf_sql_varchar" value="#form[fn]#">)
</cfquery>
</cfif>
</cfloop>
Есть несколько простых способов получить идентификатор только что вставленной записи (#NewCar.generatedkey#
). Вот небольшая статья, если вы незнакомы.
Теперь, как мы рассмотрели в комментариях к вашему предыдущему вопросу
Лучший способ - вставить в отдельные строки, как я продемонстрировал. После этого отдельные столбцы будут лучше, чем вставка в виде массива.
Единственное преимущество для вставки в виде массива - это просто, вот и все.
Недостатки, однако, многочисленны.
Чтобы выбрать любую из данных, вы должны либо
- выберите все данные. - ненужные накладные расходы
- попробуйте использовать sql для анализа данных - ненужные накладные расходы
Intertable запросы (объединения), основанные на этом поле, будут огромной головной болью.
Итак, предположим, что вы разработали что-то вроде моего примера выше. Вы можете выбрать все детали для автомобиля, как это.
<cfoutput query="CarDetails" group="carID">#Make# #Model# #Year#<br /><br />
<cfoutput>#replace(specname,"_"," ","ALL")#: <input type="text" name="#specname#" value="#htmleditformat(specvalue)#" /> <br /></cfoutput>
</cfoutput>