背景:我将把我的 ColdFusion 表单数据保存到一个数组中,并将该数组存储到数据库的列中。我对这个数组唯一要做的就是调用数据库以获取数据并将其解析回我的形式,但作为"只读"。数组将包含输入名称和值。
问:在 ColdFusion 中,在数据库中查询数组数据后,将数据解析回表单的最佳过程是什么?我是否必须在循环中重新创建表单?或者我可以定位输入并添加值,因为我会知道它们的名称?
另外,将数据保存为序列化的JSON数据与使用ColdFusion创建的数组相比是否有任何价值?
****编辑***
以下是我的数据工作流程的概述。其中一些项目是客户要求的。
-
用户填写包含 65 个输入的表单。
在 提交时,所有表单数据存储在添加到数据库中的数组中。数据库还添加了以下数据。将唯一的数字标识符、提交日期、提交表单的用户 ID(从会话变量中提取)以及最后的状态"未分配"添加到数据库中
管理员在单独的页面上检查队列。该队列简单提取仍处于"未分配"状态的所有表单提交。此队列中未使用该数组。
如果管理员选择队列中的一个条目,则以下页面将加载完全相同的表单,但我将使用数组将值填充到表单中并将所有字段设置为只读。管理员实际上只需要将表单字段中的值复制并粘贴到不同的系统中。(是的,我知道这听起来很乏味,但对于这个特定的客户端来说,没有其他选择,这实际上比他们目前使用的过程要好。
数组数据实际上永远不会用于其他任何事情,除了确保收集所有数据。
数组数据必须始终作为一个整体加载,并且一旦提交就永远不会更改。
我希望这有助于澄清我为什么问这些问题。谢谢
首先,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>