2012-04-13 63 views
0

我想从CFLOOP中提取值并转储它们,但我似乎错过了某些东西。我需要从第一个循环中提取openHours并从第二个循环中提取openMinutes,然后将它们放入变量中运行查询以提交数据库中的值。从CFLOOP获取值

这是我的结构,当我倾销#形式#。我需要得到变量form.openHours1问题是openHours通过#CountVar#获取其数量所以基本上我需要倾倒出像#form.openHours [CountVar]#

struct 
FIELDNAMES POSTITNOW,OPENHOURS1,OPENHOURS2,OPENHOURS3,OPENHOURS4,OPENHOURS5,OPENHOURS6,OPENHOURS7 
OPENHOURS1 13 
OPENHOURS2 13 
OPENHOURS3 12 
OPENHOURS4 0 
OPENHOURS5 0 
OPENHOURS6 0 
OPENHOURS7 0 
POSTITNOW YES 
+0

为了让我们能够帮助您,您需要将代码精简到本质。只留下导致问题的东西;删除所有额外的显示逻辑。 – ale 2012-04-13 16:27:28

+0

谢谢,我现在就清理一下 – Geo 2012-04-13 16:29:57

+0

看到你的数据看起来像一个例子也是有帮助的。 – ale 2012-04-13 16:33:15

回答

0

我想你想这一点,或非常类似的东西:

<cfoutput> 
<cfloop from="1" to="7" index="CountVar">   
    #openHours[CountVar]#<br> 
</cfloop> 
</cfoutput> 
+0

我已经试过了。我也尝试过''但它不起作用。它只是给了我更多的信息,例如我们openHours1 [24]' – Geo 2012-04-13 16:18:35

1

不是#form.openHours[CountVar]#你想要的是:

form["openHours" & CountVar] 

作为一个范围,形式也是一个结构,你可以使用数组符号来获得在价值。

这是使用动态表单字段名称的关键。

澄清:

form.openHours7 

相当于

form["openHours7"] 

第一通常被称为点表示法,第二作为阵列符号(因为它类似于如何引用数组元素

由于括号中的值是一个字符串,因此可以用一个变量替换它。

<cfset fieldToUse = "openHours7"> 
<cfoutput>#form[fieldToUse]#</cfoutput> 

或者,当我打开时,一个文字字符串和一个变量的组合。

你不能用点符号来做到这一点。 (至少不是没有使用evaluate(),通常不建议这样做)。

The documentation有很多关于如何使用结构的信息,包括不同的记法方法。

+0

你能让它更清楚一点吗?我不熟悉这个符号。谢谢 – Geo 2012-04-13 17:44:06

+0

@Crematorio:当然。那个更好吗? – ale 2012-04-13 17:51:17

+0

是更清晰。我没有太多的CF经验,所以谢谢你解释所有的东西 – Geo 2012-04-13 18:43:44

0

对不起,这对我来说有些模糊,但那从来没有阻止我跳进去。你会有相同数量的开放时间和开放分钟吗?你可以循环遍历form.fieldnames吗?就目前而言,您有名为openhours1-N的字段,这听起来像openminutes1-N尚未添加。看起来你可以循环使用字段名,如果字段以openhours开头,你可以从最后得到数字,然后你可以很容易地创建相应的openminutes字段。正如Al早些时候所说的那样,你很可能会使用数组符号来从表单结构中获取值。

另一个想法是表单字段名称不必是唯一的。如果你有多次“openhours”,ColdFusion会把它变成一个列表给你,然后你可以遍历这个列表。

+0

感谢您的回复。我正在重写这个代码,因为我使用了一个类似代码的早期版本,这就是为什么我有这么多问题。我完成后会更新这篇文章。再次感谢 – Geo 2012-05-01 14:50:34