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 的任何帮助,请随时提出另一个问题。
希望这可以帮助。:)