【问题标题】:Creating a dynamic form, but how to do the query?创建动态表单,但如何进行查询?
【发布时间】:2013-02-13 15:55:46
【问题描述】:

我创建了一个动态表单,可让您修改所需的输入字段数量。这是因为他们可能有 15 个乐队成员并且需要 15 个字段,或者一个乐队可能有 2 个。我唯一的问题是提交表单时,每个输入都被命名为“memberName1”、“membername2”等。使用 jQuery。我将如何在运行查询时/之前运行检查以查看这些字段是否已填充以及它们是否要将它们的值输入到数据库中?谢谢。

编辑 1:

我在想类似下面的代码。但我需要运行一个循环来计算名称为memberName 的所有当前字段,后跟一个数字。与其在第一个空旷的地方停下来,不如把它们都跑一遍。如果值为空白,则什么也不做。如果它有一个值,则将其插入我的表中。

<cfquery datasource="exampledatasource" name="insertbandmembers">
  Insert Into members(members_name)
  Values (memberName#i#)
</cfquery>

【问题讨论】:

  • 使用 html5 必需属性 但它在 IE 和 Safari 中不起作用

标签: jquery sql coldfusion


【解决方案1】:

使用静态数字循环,但一旦未传递序列中的数字就会中断。您还可以计算 jQuery 中的数字字段并将其与表单提交一起传递

<cfquery datasource="exampledatasource" name="insertbandmembers">
  INSERT Into members(members_name)
  VALUES
  <cfloop index="i" from="1" to="15">
    <cfif structKeyExists(form, 'memberName#i#') AND len(form['memberName#i#'])>
      <cfif i neq 1>, </cfif>
      ( <cfqueryparam cfsqltype="cf_sql_varchar" value="#form['memberName#i#']#"> )
    <cfelse>
      <cfbreak> 
    </cfif> 
  </cfloop>
</cfquery>

【讨论】:

  • 如果您将字段数放在隐藏的表单字段中并循环到字段的值,它不会中断。 to = "#form.numberOfFields#"
  • 你忘记了你的结束)围绕成员名称值。每个 dbms 也不支持插入多行查询。
  • 是的,如果提供了 numberOfFields,则将删除 cfelse 和 cfbreak。查询语法是mysql
【解决方案2】:

我会这样做:

<cfloop list="#form.fieldnames#" index="ThisElement">
    <cfif left(ThisElement, 10) is "memberName">
       <cfset ThisValue = form[ThisElement]>

       <cfif len(ThisValue)>
           <cfquery name="AddRecord">
              Insert Into members(members_name)
              Values 
              ( <cfqueryparam cfsqltype="cf_sql_varchar" value="#ThisValue#"> )
           </cfquery>
       </cfif>  <!--- len(thisvalue) --->

    </cfif>  <!--- left(ThisElement, 10) is "memberName" --->
</cfloop>

【讨论】:

  • 我仍然赞成将字段数添加到隐藏的表单字段并循环到值。随着字段的添加,它可以很容易地在 jquery 中更新。
  • 我们都有自己的看法。我承认你的,但不分享。我认为这是不必要的复杂化。
  • 我不确定循环整个表单结构比设置变量更容易,但没关系。 :) 我们可以同意不同意。
【解决方案3】:

(这开始是评论,但是太长了..)

有不同的方法来处理它。我的首选是Travis mentioned in the comments。基本上让 jquery 将成员总数存储在隐藏的表单字段中。然后使用该值循环访问成员字段、验证值并根据需要插入。

您可以轻松地修改 Danjamckinn 的示例来执行此操作。注意到他们使用&lt;cfqueryparam&gt; 来帮助防范sql 注入?此外,由于这些是相关的插入,您希望将整个内容包装在单个 &lt;cftransaction&gt; 中。这确保了插入物被视为一个单元。他们要么都成功,要么都失败——一起。

    <cfparam name="form.totalFields" default="0" >

    <cfloop from="1" to="#val(form.totalFields)#" index="x">
        <!--- extract current name --->
        <cfset memberName = trim(FORM["memberName"& x])>

        <!--- insert NON-empty values --->
        <cfif len(memberName)>
            <cfquery datasource="exampledatasource" name="insertbandmembers">
                INSERT INTO members ( members_name )
                VALUES 
                ( 
                   <cfqueryparam value="#memberName#" cfsqltype="cf_sql_varchar"> 
                )
            </cfquery>
        </cfif>
   </cfloop>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-09
    • 2018-10-27
    • 1970-01-01
    • 1970-01-01
    • 2013-09-24
    • 1970-01-01
    • 1970-01-01
    • 2020-06-01
    相关资源
    最近更新 更多