从具有动态命名字段的表单插入数据

时间:2013-12-17 23:39:27

标签: coldfusion cfquery

行。我做了很糟糕的工作来解释我正在尝试做什么。我会再试一次,以便更清楚。

我有一个提交到cfquery插入页面的变量列表。变量来自动态命名的表单字段,并使用cfloop

捕获
<cfloop list="#form.fieldnames#" index="item">

</cfloop> 

我所拥有的是动态命名的表单字段和添加的值,如下所示:

<input type="hidden" name="ticketid_#some_number#" value="#some_quantity#">

为简洁起见,我们假设表单字段名称为ticketid_6,值为4.这可以是不同的名称和值(例如,ticketid_3的值为1),或者可能有几个类似的表单字段构造具有不同的名称和/或值。

因此,在插入页面上,我需要将4次ticketid_6(创建4个单独的行)插入到我的表中。因此,数据库中每个动态命名的表单字段的行乘以每个字段的值。

我希望能更好地解释它。

利,

我仍然对你在上一篇文章中的建议持开放态度,但我担心我可能没有清楚地解释我的情况,以便你给出最好的建议。在我弄清楚这一部分之后,我将重新解决这个问题。

3 个答案:

答案 0 :(得分:0)

如果您需要遍历所有字段名称并将每个字段视为列表,则需要执行两个循环来插入每个项目。

<cfloop list="#form.fieldnames#" index="item"><!--- loop through all the form fields --->
  <cfif find('ticketid_',item)><!--- if the form name contains 'ticketid_'. Use findNoCase if you want to ignore case sensitivity --->
    <cfloop from="1" to="#form[item]#" index="counter"><!--- loop through the number in form.ticketid_ --->
      <cfquery datasource="#dsn#">
      INSERT INTO table (fieldname, fieldValue, TicketNum)
      VALUES (
        <cfqueryparam value="#item#" cfsqltype="cf_sql_varchar">,--fieldName from the form
        <cfqueryparam value="#form[item]#" cfsqltype="cf_sql_varchar">--value of the fieldName in the form
        <cfqueryparam value="#counter#" cfsqltype="cf_sql_integer">--ticket number being inserted
       )
      </cfquery>
    </cfloop>
  </cfif>
</cfloop>

您需要进行服务器端验证,以验证他们没有为输入框输入非数字编号,但假设您已完成此操作,那么这应该可以实现您所需要的。

答案 1 :(得分:-2)

您需要使用Evaluate函数来获取表单动态输入字段值 试试这个

<input type="hidden" name="ticketid_#some_number#" value="#some_quantity#">

<cfloop list="#form.fieldnames#" index="item">
   <cfoutpuy>Evaluate("ticketid_#item#")</cfoutpuy>
</cfloop> 

答案 2 :(得分:-4)

您需要先将数据捆绑到XML结构中

<cfsavecontent variable="myFormData">
<cfoutput>
  <ul class="xoxo">
  <cfloop list="#form.fieldnames#" index="item">
    <cfloop list="#form[item]#" index="eachItem">
  <li><b>#xmlformat(item)#</b> <var>#xmlformat(eachItem)#</var>      
    </cfloop>
  </cfloop>
 </ul>
<cfoutput>
</cfsavecontent>

然后执行单个插入

<cfquery>
   INSERT INTO table (formData)
   VALUES (<cfqueryparam value="#myFormData#" cfsqltype="cf_sql_varchar">)
</cfquery>

提取数据时,您可以

  • 按原样显示,项目符号列表,
  • 推广表格中的一堆行

请注意,数据作为HTML和XML插入