0

ユーザーが更新したいフィールドをチェックして保存を押すことができるページがあります。チェックボックスをオンにすることで複数の更新を実行できるページに、以下のコードがあります。

<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エラーが発生します。私はこれを回避することができません。このコードの何が問題になっているのかを提案してください。

4

2 に答える 2

1

form.vselectionが一連のチェックボックスである場合、空のリスト要素は問題になりません。ただし、これらの3行を見てみましょう。

    <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番目の要素を探しています。フォームフィールドが1004ではなく1つの要素のリストである可能性があります。

それが問題です。それを解決するのに助けが必要な場合はお知らせください。

于 2013-03-13T17:47:22.337 に答える
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>
于 2013-03-13T21:21:37.170 に答える