【问题标题】:Submit form information multiple times多次提交表单信息
【发布时间】:2015-08-18 22:17:16
【问题描述】:

我有一个包含多项选择选项的表单。我想这样做,以便当用户点击提交时,它将使用所有相关字段填充我的数据库,然后为多选部分执行某种循环。

https://jsfiddle.net/vtyofmza/1/

例如,有人在多项选择中突出显示 3 个字段并输入他们的名字。当他们点击提交时,数据库将填充

John Doe - 早餐

John Doe - 小吃

John Doe - 甜点

我在想这样的事情可能会起作用,但它只是重新重置表单

iSelect = $('#meal').val();
iLength = $('#meal option:selected').length;
for (i = 0; i < iLength; i++){
    $('#meal').val(iSelect[i])
    document.form.submit();
}

但是当它提交信息时,它会返回并重新重置页面。

submit.cfm 看起来像这样

<cfquery name="Add" datasource="food"> 
INSERT INTO Log (Meal, Name)
VALUES (#Form.Neal#, #Form.Name#)
</cfquery>
<cflocation url="... loops back to original page">

【问题讨论】:

  • 您不需要在javascript中对此做任何事情,只需接受coldfusion中的字段值并在那里处理即可。
  • 您能否对此进行更深入的解释?
  • @khgove - 正如 Kevin 所说,javascript 的工作是提交输入的表单值。任何循环都应在 ColdFusion 中完成。多个选择列表值将作为 csv 列表提交,即 form.Meal = "Breakfast,Snacks,Dessert"。只需通过该列表loop 并为每餐+名称执行insert。话虽如此,通常您的列表“值”将是某种数字 id,而不是文本(如果文本包含列表分隔符,这可能会出现问题)。
  • 如果上面不只是伪代码,记得在实际查询中使用cfqueryparam,防止sql注入。
  • @Leigh,你能告诉我这个循环是如何完成的吗?我在 SQL 方面也不例外,我主要只用它来查询和插入。与此同时,我会反复试验。另外,是的,这都是伪的,我的主要代码有很大不同。这只是一个快速的概念来展示我正在尝试做的事情

标签: javascript jquery html forms coldfusion


【解决方案1】:

正如@Kevin B 上面所说,这不是javascript 的工作。任何额外的处理或循环都应该在 ColdFusion 中完成。

基本循环:

多个选择将作为 csv 列表提交,即form.Meal = "Breakfast,Snacks,Dessert"。只需遍历该列表并为每餐+名称执行插入。有一些方法可以改进这种循环,但下面是基本思想(没有验证):

<!--- ensure field always exists --->
<cfparam name="form.Meal" default="">

<!--- loop through the meal list and insert each one individually --->
<cfloop list="#form.Meal#" index="currMealName">
    <cfquery name="Add" datasource="food"> 
       INSERT INTO Log (Meal, Name)
       VALUES ( 
         <cfqueryparam value="#currMealName#" cfsqltype="cf_sql_varchar">
        , <cfqueryparam value="#Form.Name#" cfsqltype="cf_sql_varchar">
       )
    </cfquery>
</cfloop>

注意:一些重要说明

  • 此类相关的查询循环应包装在单个 transaction 中以确保数据完整性
  • 通常,列表“值”将是某种数字 id,而不是文本(如果文本包含列表分隔符,可能会出现问题)。

更好的选择

如果选择列表值的来源是另一个数据库表,另一种方法是使用SELECT 语句插入值。这具有内置验证的优点,并且它还在单个查询中插入所有值。就个人而言,我更喜欢这种方法而不是循环。出于演示目的,该示例使用 type=cf_sql_varchar。显然根据需要更新类型以匹配您的实际列。

INSERT INTO Log (Meal, Name)
SELECT Meal
      , <cfqueryparam value="#form.name#" cfsqltype="cf_sql_varchar"> 
FROM  YourMealTable
WHERE  Meal IN 
          (
            <cfqueryparam value="#form.meal#" list="true" cfsqltype="cf_sql_varchar"> 
          )

【讨论】:

    猜你喜欢
    • 2015-08-10
    • 1970-01-01
    • 2015-04-02
    • 2017-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多