ColdFusion将表单数据添加到操作页面上的数组

时间:2015-01-07 18:45:26

标签: html forms coldfusion

问题我有一个包含60多个输入的HTML表单,在提交时我想使用ColdFusion将所有值保存到操作页面上的数组中。是否有更有效的方法来保存所有60多个输入的值,而不必一次提及每个输入?

我正在寻找某种循环或类似的过程,这将节省我在我的操作页面中写出所有输入名称的时间。

如果需要,我可以提供我的代码示例,但它们只是标准的HTML表单输入(文本和选择),表单底部有一个提交按钮。

2 个答案:

答案 0 :(得分:3)

注意:看过您对OP的评论后,您希望将其大量插入到一个db字段中。你应该小心这一点。虽然现在很容易,但是在Cold Fusion中处理查询中的数据非常困难并且稍微有些困难。


这应该有效

<cfset fArr = ArrayNew(1)>
<cfset fcount = 1>
<cfloop list="#form.fieldnames#" index="f">
  <cfif not listfind("bad,field,names",f)>
    <cfset fArr[fcount] = form[f]>
    <cfset fcount = fcount + 1>
  </cfif>
</cfloop>

CFIF是您可以省略您可能想要的字段名称。如果你想收集每一个,只需删除它。也许你有一个名为&#34; gobtn&#34;的提交按钮。你不想聚集到数组中,你会使列表像<cfif not listfind("gobtn",f)>

那样gobtn

你可以在任何范围或结构中使用类似的东西,除了它们通常不具有字段名属性或类似的东西,但Cold Fusion具有函数StructKeyList(),它也适用于表单范围,但不幸的是StructKeyList(form)还包括字段fieldnames,这可能会令人讨厌,只是使用内置变量更容易。

使用URL范围进行演示(功能上与结构相同)

<cfset fArr = ArrayNew(1)>
<cfset fcount = 1>
<cfloop list="#StructKeyList(url)#" index="f">
  <cfif not listfind("bad,field,names",f)>
    <cfset fArr[fcount] = url[f]>
    <cfset fcount = fcount + 1>
  </cfif>
</cfloop>

(Chris Tierney使用ArrayAppend是正确的,你可以做一些更合理的事情)。我不知道为什么我没有包含它。

同样ArrayNew(1)[]是相同的,但早期版本的CF不支持它,所以我习惯性地回答ArrayNew(1)。

<cfset fArr = ArrayNew(1)>
<cfloop list="#StructKeyList(url)#" index="f">
  <cfif not listfind("bad,field,names",f)>
    <cfset ArrayAppend(fArr,url[f])>
  </cfif>
</cfloop>

鉴于你的一些评论..

另一个选项是SerializeJSON

你可以这样做

<cfset formCopy = Duplicate(form)>
<!--- We have to duplicate the struct so that we can safely modify a copy without affecting the original --->
<cfset DeleteItems = "fieldnames,gobtn">
<cfloop list="#deleteItems#" index="df">
  <cfset StructDelete(formCopy,df)>
</cfloop>
<cfset ForDBInsert = SerializeJSON(formCopy)>
<!--- ForDBInsert now contains a JSON serialized copy of your data. You can insert it into
  the database as such, and call it back later. --->

回电话

<cfquery name="getFD">
  select FormDump from Table
</cfquery>

<cfoutput query="getFD">
  <cfset ReBuild = DeserializeJSON(FormDump)>
  <!--- You now have a struct, Rebuild, that contains all the fields in easy to access format --->
  <cfdump var="#ReBuild#">
</cfoutput>

答案 1 :(得分:3)

var fieldNameArray = listToArray(form.fieldNames);
var formArray = [];

for( fieldName in fieldNameArray ) {
    if( fieldNamme != "fieldNames" ) {
        arrayAppend( formArray, { name = fieldName, value = form[fieldName] } );
    }
}