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

Предыстория: я собираюсь сохранить данные форм ColdFusion в массив и сохранить этот массив в столбце базы данных. Единственное, что я буду делать с этим массивом, - это вызов базы данных для данных и синтаксический анализ их обратно в мою форму, но только для чтения. Массив будет содержать как входное имя, так и значение.

Вопрос: В ColdFusion после того, как я запросил базу данных для данных массива, какой будет лучший процесс для анализа данных обратно в мою форму? Должен ли я воссоздать свою форму в цикле? Или я могу нацелиться на входы и добавить значения, так как я буду знать их имена?

Также есть ли смысл сохранять данные как сериализованные данные JSON в массив, созданный с помощью ColdFusion?

****РЕДАКТИРОВАТЬ***

Ниже приводится схема рабочего процесса моих данных. Некоторые из этих предметов по запросу клиента.

  1. Пользователь заполняет форму с 65 входами.

  2. При отправке все данные формы хранятся в массиве, который добавляется в базу данных. В базу данных также добавлены следующие данные. Уникальный числовой идентификатор, дата отправки, идентификатор пользователя, который отправил форму (извлекается из переменной Session), и, наконец, статус "не назначен" добавляется в базу данных.

  3. Администратор проверяет очередь на отдельной странице. Эта простая очередь извлекает все отправленные формы, которые все еще находятся в состоянии "не назначено". Массив не используется в этой очереди.

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

  5. Данные массива буквально никогда не будут использоваться ни для чего иного, кроме как для проверки того, что все данные собраны.

  6. Данные массива всегда должны быть загружены целиком и никогда не будут изменены после отправки.

Надеюсь, это поможет понять, почему я задаю эти вопросы. Спасибо

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>
Другие вопросы по тегам