我有一个包含许多值的表单(大约25个字段)。表单发布并插入数据库后,我必须获取表单信息并将其输出到报表。报告应仅显示包含值的字段(因此,如果仅填写了5个字段,则报告中只有5个字段)。
最简单的方法是做这样的事情:
<cfif form.firstname neq "">
<li><First Name: #FORM.FIRSTNAME#</li>
</cfif>
<cfif form.lastname neq "">
<li><Last Name: #FORM.LASTNAME#</li>
</cfif>
有人可以推荐更好的方法吗?我想将它保留在ColdFusion方面,因为整个报告都被剥离了HTML以生成纯文本报告。
答案 0 :(得分:1)
你可以像这样循环遍历
<cfloop list="#form.fieldNames#" index="i">
<li><cfoutput>#i# = #form[i]#</cfoutput></li>
</cfloop>
不确定这是你想要的,但它可能会让你走上正确的轨道
根据您的评论试试这个:
<cfloop list="#form.fieldNames#" index="i">
<li><cfoutput>
<cfswitch expression="#i#">
<cfcase value="firstName">
First Name
</cfcase>
<cfcase value="lastName">
Last Name
</cfcase>
<cfdefaultcase>
#i#
</cfdefaultcase>
</cfswitch>
: #form[i]#</cfoutput></li>
</cfloop>
答案 1 :(得分:1)
这是我对此的尝试:感谢Lance指出我朝着正确的方向前进:
<ul>
<cfoutput>
<cfloop list="#form.fieldNames#" index="i">
<li>
<cfif len(trim(form[i])) neq 0>
<cfswitch expression="#i#">
<cfcase value="FIRST_NAME">First Name</cfcase>
<cfcase value="LAST_NAME">Last Name</cfcase>
<cfdefaultcase>#i#</cfdefaultcase>
</cfswitch>
: #FORM[i]#
</cfif>
</li>
</cfloop>
</cfoutput>
</ul>
答案 2 :(得分:1)
这是使用switch / case的替代方法 - 将标签放在struct
中<cfset FieldLabels =
{ 'first_name' : "First Name"
, 'last_name' : "Last Name"
, 'other stuff' : "Whatever you like"
}/>
<cfoutput>
<ul>
<cfloop index="CurField" list=#Form.FieldNames# >
<cfif len(trim( Form[CurField] )) >
<li>
#StructKeyExists( FieldLabels , lcase(CurField) )
? FieldLabels[ lcase(CurField) ]
: HtmlEditFormat( replace(CurField,'_',' ','all') )
#
: #HtmlEditFormat( Form[CurField] )#
</li>
</cfif>
</cfloop>
</ul>
</cfoutput>
请注意,它不会对len执行neq 0
- 这完全没必要。
第一个哈希中的a ? b : c
构造是三元条件运算符 - 在CF10和Railo 3.3以后支持if / else的紧凑方式。
如果名称没有明确的标签,它会用空格替换下划线,如果报告是针对非技术人员的话,这可能更好。
如果您可以在不修改FieldNames列表的情况下使用在表单范围中添加(或删除)项目的代码,则可以更改此循环...
<cfloop item="CurField" collection=#Form# >
<cfif CurField EQ 'FieldNames'>
<cfcontinue />
</cfif>
...
其中查看了Form范围中的实际键 - 尽管此方法无法保证它们的顺序。
答案 3 :(得分:0)
你如何直接循环结构本身?
<cfscript>
for(eachKey in FORM){
if(FORM[eachKey] neq ''){
writeOutput('<li>' &
FORM[eachKey] & ' = ' &
trim( FORM[eachKey] ) &
'</li>');
}
}
</cfscript>
您可以在表单变量名称中添加空格。