如何保存主键和表单提交的值

时间:2012-03-01 14:43:54

标签: coldfusion

我有一系列的表行如下:

<cfloop query="qryPlayer">
   (...snip...)
   <input data-playerid="#PlayerID#" name="PlayerSort" value="#PlayerSort#">
   (...snip...)
</cfloop>

在表单底部,我有一个字段:

<input type="hidden" name="PlayerIDs"> <!--- Populated by js --->

每当用户更改任何行中的值时,我会使用与需要更新的字段关联的主键列表填充PlayerID:

$('input[name=PlayerSort]').change(function() {
    $('input[name=Save]').show();
    var arrPlayerID = [];
    $('input[name=PlayerSort]').each(function() {
        if ($(this).val()) {
            arrPlayerID.push($(this).data('playerid'));
        }
    });
    $('input[name=PlayerIDs]').val(arrPlayerID.join(','));
});

然后,当用户按下“保存”按钮时,我会更新其中包含值的所有字段。

问:这对我来说是正确的吗?它有效,但是我忘记了处理表单提交的一些基本方法吗?

顺便说一下,客户并不希望它被AJAX化,因为他想让用户能够按下重置并重新开始。因此,输入一组值,单击“保存”,让ColdFusion更新与form.PlayerIDs关联的所有PlayerSort值。

<cfloop list="#form.PlayerIDs#" index="local.PlayerID">
   <cfset local.Index = local.Index + 1>
   UPDATE dbo.Player SET
   PlayerSort = <cfqueryparam cfsqltype="cf_sql_integer" value="#ListGetAt(form.PlayerSort,local.Index)#">
   WHERE PlayerID = <cfqueryparam cfsqltype="cf_sql_integer" value="#local.PlayerID#">;
</cfloop>

1 个答案:

答案 0 :(得分:1)

我认为你的方法很好。但是,它可以在没有JavaScript的情况下完成,这会减少和简化您的代码,并确保它能够解决用户禁用JavaScript的奇怪机会。

将此用作表单代码:

 <cfloop query="qryPlayer">
    (...snip...)
    <input name="PlayerSort_#PlayerID#" value="#PlayerSort#">
    (...snip...)
 </cfloop>

然后你的行动代码将是:

 <cfloop collection="#Form#" item="field">
    <cfif ListLen(field,"_") IS 2 AND ListFirst(field,"_") IS "PlayerSort">
        <cfquery datasource="YourDatasource">
        UPDATE  dbo.Player
        SET     PlayerSort = <cfqueryparam cfsqltype="cf_sql_integer" value="#Form[field]#">
        WHERE   PlayerID = <cfqueryparam cfsqltype="cf_sql_integer" value="#ListLast(field,'_')#">
        </cfquery>
    </cfif>
 </cfloop>