如何根据表单列名称循环表单值?

时间:2016-05-11 21:09:52

标签: coldfusion

我有一个包含6个check_num字段,1个帐号和一个金额的表单。我想将这些值插入数据库表中:

<cfquery datasource="test" name="test">
    insert into test (ACCOUNT_NUMBER,check_num,amount)
    values ('#ACCOUNT_NUMBER#','#check_num#','#amount#')
</cfquery>

但是,我不想将所有值都插入1行。如果任何check_num字段包含数字,我想插入该值,以及acccount_number和amount值。

例如,对于下面的数据,我想插入5行。字段&#34; check_num6&#34;将被跳过,因为它是空的。

ACCOUNT_NUMBER  123456789
CHECK_NUM1  56623
CHECK_NUM2  5512
CHECK_NUM3  6562
CHECK_NUM4  653
CHECK_NUM5  6623
CHECK_NUM6  
AMOUNT  32.31
FIELDNAMES  ACCOUNT_NUMBER,CHECK_NUM1,CHECK_NUM2,CHECK_NUM3,CHECK_NUM4,CHECK_NUM5,CHECK_NUM6,AMOUNT,SUBMIT
SUBMIT  Submit

1 个答案:

答案 0 :(得分:1)

不完美但你可以从这里开始/获得灵感:

<cfloop list="#StructKeyList(form)#" index="i">
    <cfif (left('#i#', 9) is "CHECK_NUM") and (trim(form['#i#']) is not "")>
        <cfquery datasource="test" name="test">
            insert into test (ACCOUNT_NUMBER,check_num,amount)
            values ('#ACCOUNT_NUMBER#','#form['#i#']#','#amount#')
        </cfquery>
    </cfif>
</cfloop>

此外,您应该验证,看看您的数据库是否支持多个插入,更改您的查询以使用cfqueryparam,研究它。因此,更好的cfquery代码将是:

<cfquery datasource="test" name="test">
    insert into test (
        ACCOUNT_NUMBER,
        check_num,
        amount
    )
    values (
        <cfqueryparam cfsqltype="cf_sql_varchar" value="#form.ACCOUNT_NUMBER#">,
        <cfqueryparam cfsqltype="cf_sql_varchar" value="#form['#i#']#">,
        <cfqueryparam cfsqltype="cf_sql_varchar" value="#form.amount#">
    )
</cfquery>