0

我有一个包含许多值的表单(大约 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 以生成纯文本报告。

4

4 回答 4

1

这是使用 switch/case 的替代方法 - 将标签放入结构中

<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>

请注意,它不适neq 0用于 len - 这完全没有必要。

a ? b : c一个哈希内部的构造是三元条件运算符 - 一种执行 if/else 的紧凑方式 - 在 CF10 和 Railo 3.3 及更高版本中受支持。

如果名称没有明确的标签,它会用空格替换下划线,如果报告是针对非技术受众的,这可能更可取。

如果您有可能在不修改 FieldNames 列表的情况下在表单范围内添加(或删除)项目的代码,您可以为此更改循环...

<cfloop item="CurField" collection=#Form# >
    <cfif CurField EQ 'FieldNames'>
        <cfcontinue />
    </cfif>
    ...

它查看 Form 范围内的实际键 - 尽管此方法不能保证它们的顺序。

于 2013-06-22T10:33:39.247 回答
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>
于 2013-06-21T17:09:08.497 回答
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>
于 2013-06-21T16:20:29.757 回答
0

你直接在结构本身上循环怎么样?

<cfscript>    
for(eachKey in FORM){
    if(FORM[eachKey] neq ''){
        writeOutput('<li>' & 
                    FORM[eachKey] & ' = ' &
                    trim( FORM[eachKey] ) &
                   '</li>');
    }
}
</cfscript>

您可以在表单变量名中有一个空格。

于 2013-06-22T03:41:59.623 回答