Coldfusion 来自数据库的cfloop和动态变量

Coldfusion 来自数据库的cfloop和动态变量,coldfusion,Coldfusion,我有一个小表单,从1到30循环并分配变量。在将这些变量保存到数据库后,我在弄清楚如何将输入值设置为数据库中的值时遇到了一些问题。这是我的一些代码 <cfloop index="i" from="1" to="30"> <select name="supply_#i#" id="supply_#i#" /> <cfloop query="GetDescriptor">

我有一个小表单,从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>

我认为实现这一点最简单的方法是使用数组表示法。也就是说,使用括号而不是点。因为所有变量作用域都是结构,所以可以这样做

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>