我有一个从1到30循环的小表单并分配变量。在将这些变量保存到数据库之后,我在确定如何将输入值设置为数据库中的值时遇到了一些麻烦。这是我的一些代码。
<cfloop index="i"
from="1"
to="30">
<select name="supply_#i#"
id="supply_#i#"
/>
<cfloop query="GetDescriptor">
<option value="#GetDescriptor.Code#">
#GetDescriptor.Descriptor#
</option>
</cfloop>
</select>
<input type="text"
name="quant_#i#"
id="quant_#i#"
/>
</cfloop>
完成后,用户将所有30个值保存到数据库中。当他们尝试查看或编辑表单时,我需要显示以前选择的值。我真的不知道如何将coldfusion变量“嵌套”在一起,或者如果它甚至可能,但这里是一个不起作用的VIEW / EDIT .cfm的例子,但是向你展示了我想要实现的目标。值。
<cfloop index="i"
from="1"
to="30">
<cfset "supply_#i#" = #QUERY.supply#i##>
<cfset "quant_#i#" = #QUERY.quant#i##>
<select name="supply_#i#"
id="supply_#i#"
/>
<cfloop query="GetDescriptor">
<option value="#GetDescriptor.Code#"
<cfif #VARIABLES.supply_#i## EQ '#GetDescriptor.Code#'>
SELECTED="SELECTED"
</cfif> >
#GetDescriptor.Descriptor#
</option>
</cfloop>
</select>
<input type="text"
name="quant_#i#"
id="quant_#i#"
value ="#VARIABLES.quant_#i##"
/>
</cfloop>
答案 0 :(得分:1)
我认为最简单的方法是使用数组表示法。也就是说,使用括号代替点。由于所有变量范围都是结构,因此可以执行此操作。
variables["foo"]
相当于
variables.foo
所以在你的情况下,你可能想引用
#VARIABLES["supply_#i#"]#
或者,或许
#VARIABLES["supply_" & i]#
答案 1 :(得分:0)
(评论太长)
插入值的db表的实际结构是什么?变量名称建议您使用非规范化数据库设计。如果是这样,请考虑规范化结构并将数据存储在行(SupplyCode,Quantity)中,而不是列(Supply1,Qty1,Supply2,Qty2,....)。规范化结构更容易查询,并根据需要支持尽可能多的条目。
只需查询表并使用查询循环显示现有值。使用currentRow
代替索引变量i
:
<cfquery name="existingEntries" ...>
SELECT SupplyCode, Quantity
FROM YourTable
ORDER BY .....
</cfquery>
<cfloop query="existingEntries">
<select name="SupplyCode_#currentRow#" id="SupplyCode_#currentRow#">
<cfloop query="GetDescriptor">
<option value="#GetDescriptor.Code#"
<cfif existingEntries.SupplyCode EQ GetDescriptor.Code>
SELECTED="SELECTED"
</cfif>>
#GetDescriptor.Descriptor#
</option>
</cfloop>
</select>
<input type="text" name="Quantity_#currentRow#" value ="#existingEntries.Quantity#" .... />
</cfloop>
NB:通常,您会存储GetDescriptor表中的FK ID,即“SupplyID”,而不是字符串代码或说明,即“SupplyCode”