变量cfform值-嵌套井号

4

我遇到一个问题。我正在使用cfoutput来运行查询结果并放在表单里面。有一些cfselect的名字是动态生成的,例如entry_1、entry_2等等。然后它们连同记录计数一起传递到一个actionpage中,在url中插入这些值到数据库中,使用cfloop循环。

<cfloop from="1" to="#url.Count#" index="i">  
<cfquery name="id_#i#" datasource="xxx">Insert Into table1(entry_level) Values(#form.entry_#i##)</cfquery>  
</cfloop>  

每次都出现错误。我尝试使用数组格式,但仍然无法使其工作。请帮忙!

1个回答

10

你不能以这种方式构造动态结构体选择器。您可以执行以下操作以获得相同的结果。

因此,使用以下数据:

<cfset url.count = 3>
<cfset form.entry_1 = 1>
<cfset form.entry_2 = 2>
<cfset form.entry_3 = 3>

这样的代码可以正常运行 -

<cfloop from="1" to="#url.Count#" index="i">  
  <cfquery name="id_#i#" datasource="xxx">
    Insert Into table1(entry_level) Values(#form['entry_' & i]#)
  </cfquery>  
</cfloop>  

ColdFusion提供了两种访问结构体的值的方法,一种是通过点操作符,另一种是通过方括号。如果你尝试使用动态键来访问结构体,你必须使用方括号。

顺便说一下,稍微好一些的方式是:

   <cfloop from="1" to="#url.Count#" index="i">  
      <cfquery name="id_#i#" datasource="xxx">
        Insert Into table1(entry_level) Values(<cfqueryparam value="#form['entry_' & i]#">)
      </cfquery>  
    </cfloop>  

cfQueryParam自动转义输入参数,使你不必担心SQL注入攻击。它还可以使查询略微更加高效。


哇,这真是太有帮助了!非常感谢!(对于这个新手问题,我很抱歉) - MeanDean73
你不知道我在这个问题上跌倒了多少次,而我已经做了15年的CF。 - Brian Hoover
1
不要忘记在cfqueryparam中添加正确的“cfsqltype”。如果省略,则CF默认为“cf_sql_char”,这会强制进行日期和数字的隐式转换(有时会导致意外结果)。 - Leigh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接