问题描述
我有一个表单,允许用户按区域编号将多个记录分配给技术人员。它通过为未完成记录中的每个区域输出一行以及加入的技术人员的选择列表来实现这一点:
<cfoutput query="getAreaList">
<div class="row">
<div class="col-xs-4">
<div class="form-group">
<label for="hub">DWS Area:</label>
<input type="text" name="oparea" id="oparea" value="#OpArea#" class="form-control" />
</div>
</div>
<div class="col-xs-4">
<div class="form-group">
<label for="sub">Assign to:</label>
<select id="series" name="sub" class="form-control">
<cfloop query="getTechAreas">
<cfif OpArea EQ getAreaList.OpArea>
<option value="#username#" class="#OpArea#">#displayname#</option>
</cfif>
</cfloop>
</select>
</div>
</div>
</div>
</cfoutput>
结果输出如下所示 - 两个数据列表:
form.opArea:区域4,区域5
form.sub: PERSON1,PERSON2
我的目标是更新我的工作表,其中特定 form.OpArea
的每一行都更新为技术人员的姓名 form.sub
。
如何遍历每个列表并在匹配 opArea
的地方插入正确的技术名称?
我尝试遍历插入,但插入的是整个列表,而不是当前评估的列表项。我目前只是想将它插入到一个保存表中来测试我的代码:
<cfoutput>
<cfloop list="#form.oparea#" index="i">
<cfquery datasource="cfLKDM" name="insertdata">
insert into [DWS_General_Dev].[LogSure].[Holding]
(AreaNo)
values
('#form.oparea#')
</cfquery>
谢谢
解决方法
您正在获取整个列表,因为您仍在循环中引用表单字段 form.oparea
。其中包含整个列表。当循环遍历列表时,正如您所做的那样,cfloop
将在每次迭代期间使用列表项的当前值填充 index
变量。
因此,您应该在示例中使用 form.oparea
而不是使用 i
。您应该将该索引变量的名称更改为更具描述性。
像你这样的例子:
<cfloop list="#form.oparea#" index="i">
<cfquery datasource="cfLKDM" name="insertdata">
insert into [DWS_General_Dev].[LogSure].[Holding]
(AreaNo)
values
('#i#')
</cfquery>
最好将索引变量名称更改为更具描述性:
<cfloop list="#form.oparea#" index="thisOPArea">
<cfquery datasource="cfLKDM" name="insertdata">
insert into [DWS_General_Dev].[LogSure].[Holding]
(AreaNo)
values
('#thisOPArea#')
</cfquery>