我有一个页面,允许用户检查他们想要更新的字段并点击保存。我在页面上有以下代码,通过选中复选框可以完成多个更新。
<cfif isDefined("form.update")>
<cfset list1=#form.vselection#>
<cfif isDefined("form.vselection") and listlen(form.vSelection) gt 0>
<cfset vempID = #UCase(Right(cgi.remote_user,6))#>
<cfloop index="i" from="1" to="#listlen(form.vselection)#">
<cfset vSelectedval = Listgetat(form.vselection,i)>
<cfset v_position_id = Listgetat(form.vpostn,vselectedval)>
<cfset v_sched_grp = Listgetat(form.vschgrp,vSelectedval)>
<cfset v_accr_prof = Listgetat(form.vaccprof,vSelectedval)>
<cfset v_pay_rule = Listgetat(form.vpayrul,vSelectedval)>
<cfset v_rest_days = Listgetat(form.vrestdays,vSelectedval)>
<!--- This is the update query --->
<cfquery name="updpostn" datasource="mbtran">
UPDATE KRONOS_IF.POSITION_DETAIL
SET schedule_group = '#v_sched_grp#',
accrual_profile = '#v_accr_prof#',
pay_rule_name = '#v_pay_rule#',
rest_days = '#v_rest_days#'
WHERE position_id = '#v_position_id#'
</cfquery>
</cfloop>
</cfif>
</cfif>
我收到无效列表索引1004错误。我无法解决这个问题。请建议此代码有什么问题。
答案 0 :(得分:1)
如果form.vselection是一堆复选框,那么空列表元素不应成为问题。但是,让我们看看这三行。
<cfloop index="i" from="1" to="#listlen(form.vselection)#">
<cfset vSelectedval = Listgetat(form.vselection,i)>
<cfset v_position_id = Listgetat(form.vpostn,vselectedval)>
我们还假设form.vselection的第一个元素是1004.下一个命令是查找form.vpostn的第1004个元素。很可能表单字段是1个元素的列表,而不是1004。
这就是问题所在。如果您需要帮助解决它,请告诉我们。
答案 1 :(得分:0)
我建议将列表转换为数组以查找值。在我看来,代码比listGetAt
更清晰。
<cfset list1 = listtoarray(form.vselection,',',true)>//use true to include empty rows for blank list items
<cfif structKeyExists(form,'vselection') and NOT arrayIsEmpty(list1)>
<cfset vempID = UCase(Right(cgi.remote_user,6))>
<cfloop index="i" from="1" to="#listlen(form.vselection)#">
<cfset vSelectedval = list1[i]>
</cfloop>
</cfif>