1

背景:我要将我的 ColdFusion 表单数据保存到一个数组中,并将该数组存储到数据库的列中。我将对这个数组做的唯一事情是调用数据库以获取数据并将其解析回我的表单,但作为“只读”。该数组将包含输入名称和值。

问题:在 ColdFusion 中,我在数据库中查询了数组数据后,将数据解析回我的表单的最佳过程是什么?我是否必须在循环中重新创建我的表单?或者我可以定位输入并添加值,因为我会知道它们的名字吗?

将数据保存为序列化的 JSON 数据与使用 ColdFusion 创建的数组相比,还有什么价值吗?

****编辑***

以下是我的数据工作流程的概述。其中一些项目是客户要求的。

  1. 用户使用 65 个输入完成表单。

  2. 在提交时,所有表单数据都存储在一个数组中,该数组被添加到数据库中。该数据库还添加了以下数据。唯一的数字标识符、提交日期、提交表单的用户 ID(从 Session 变量中提取),最后将“未分配”状态添加到数据库中

  3. 管理员在单独的页面上检查队列。该队列简单地拉出所有仍处于“未分配”状态的表单提交。此队列中未使用该数组。

  4. 如果管理员选择队列中的一个条目,则以下页面将加载完全相同的表单,但我将使用数组将值填充到表单中并将所有字段设置为只读。管理员实际上只需要将表单字段中的值复制并粘贴到不同的系统中。(是的,我知道这听起来很乏味,但对于这个特定的客户,没有其他选择,这实际上比他们目前使用的流程更好。)

  5. 除了确保收集所有数据外,数组数据实际上永远不会用于其他任何事情。

  6. 数组数据将始终必须作为一个整体加载,并且一旦提交就永远不会更改。

我希望这有助于弄清楚我问这些问题的原因。谢谢

4

1 回答 1

0

首先,pankaj 是什么意思。

你可以做这样的事情。假设我正在存储汽车的优先方面。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

您也可以在此表中存储(品牌、型号、年份),但假设您没有。

你的插入变成了这样的东西..

(如果您不使用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>

有一些简单的方法可以获取您刚刚插入的记录的 id ( #NewCar.generatedkey#)。如果您不熟悉,这里有一篇简短的文章。

现在,正如我们在您上一个问题的评论中所介绍的那样

正如我所演示的那样,最好的方法是插入单独的行。之后,单独的列会比作为批量插入要好。

作为批量插入的唯一好处是它很容易,就是这样。

然而,缺点是很多的。

要选择任何数据,您必须

  • 选择所有数据。- 不必要的开销
  • 尝试使用 sql 解析数据 - 不必要的开销

基于此字段的表间查询(连接)将是一个非常令人头疼的问题。

所以假设你设计了类似我上面例子的东西。您可以为这样的汽车选择所有详细信息。

<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>
于 2015-01-09T17:42:39.393 回答