Coldfusion 来自数据库的cfloop和动态变量
我有一个小表单,从1到30循环并分配变量。在将这些变量保存到数据库后,我在弄清楚如何将输入值设置为数据库中的值时遇到了一些问题。这是我的一些代码Coldfusion 来自数据库的cfloop和动态变量,coldfusion,Coldfusion,我有一个小表单,从1到30循环并分配变量。在将这些变量保存到数据库后,我在弄清楚如何将输入值设置为数据库中的值时遇到了一些问题。这是我的一些代码 <cfloop index="i" from="1" to="30"> <select name="supply_#i#" id="supply_#i#" /> <cfloop query="GetDescriptor">
<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>
我认为实现这一点最简单的方法是使用数组表示法。也就是说,使用括号而不是点。因为所有变量作用域都是结构,所以可以这样做
variables["foo"]
相当于
variables.foo
因此,在您的情况下,您可能希望引用
#VARIABLES["supply_#i#"]#
或者,也许
#VARIABLES["supply_" & i]#
评论太长了
插入值的db表的实际结构是什么?变量名表明您正在使用非规范化的db设计。如果是这样,考虑规范结构和存储数据行SupplyCode,数量,而不是列Posiy1,QTy1,Posiy2,QTy2,…规范化结构更易于查询,并且支持所需的任意多或任意少的条目 只需查询表并使用查询循环来显示现有值。使用currentRow代替索引变量i:
注意:通常您会存储GetDescriptor表中的FK ID,即SupplyID,而不是字符串代码或描述,即SupplyCode插入值的db表的实际结构是什么?变量名表明您正在使用非规范化的db设计。此外,是否可以保存少于30个条目?@gt650r-关联数组表示法也适用于查询列名。尽管与查询对象一起使用时,必须同时指定列名和行号。ie queryName[supply_&i][i]并验证查询中是否存在行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>