Form 范围有一个FieldNames 变量,它将告诉您提交了哪些字段。
您也可以使用StructKeyList(Form) 来获取范围内当前变量的列表。这还将包括 FieldNames 和任何其他已添加到 Form 范围内的变量。
其中任何一个都可以在 <cfloop index="CurField" list="#StructKeyList(Form)#"> 中使用 - 但还有更简单的方法...
如果您在 CF8 上,您可以使用 serializeJson() 和 deserializeJson() 函数将范围转换为字符串,然后将其存储在合适的数据库字段中。
如果您使用的是 CF6..7,那么您可以从 riaforge 下载一个名为 cfjson 的 CFC,它模仿了这些功能。
最后,如果您使用的是早期版本的 CF,或者对使用 JSON 进行存储有一种奇怪的反感,您可以使用更简单的循环来滚动您自己的循环到上面提示的循环 - 收集循环可以让您直接循环结构或范围 - 请注意,有些讨厌的人选择了“项目”而不是“索引”作为这些属性。
由于我们知道表单变量都是简单的对象(即字符串),因此我选择了基本的key=value[newline]key=value[newline]... 格式,这也很容易反转。
编码:
<cfset Output = '' />
<cfloop item="CurField" collection="#Form#">
<cfset Output = Output & CurField & '=' & Form[CurField] & Chr(10) />
</cfloop>
<cfoutput>#Output#</cfoutput>
解码:
<cfset FormData = StructNew()/>
<cfloop index="CurLine" list="#Output#" delimiters="#Chr(10)#">
<cfset FormData[ListFirst(CurLine,'=')] = ListRest(CurLine,'=') />
</cfloop>
<cfdump var="#FormData#"/>
最后一个重要提示:与所有用户提供的变量(Form、Url、Cookie 范围)一样,您必须确保正确处理它们以防止安全漏洞 - 特别是 确保您使用 cfqueryparam 所有 您的数据库查询 - 不想走得太远,但请随时提出其他问题如果您在 cfqueryparam 方面需要任何帮助。
希望这会有所帮助。 :)