检查动态字段中没有输入

时间:2010-10-21 13:41:37

标签: forms coldfusion dynamic-forms

基本上,我有一个表单,在填写此表单之前根据“部门”输入生成一定数量的“出版物类型”。 (部门特定的发布类型被识别。)每个发布类型都有几个字段...(它们是相同的字段,所以每种类型都有...让3个字段..)我有一个读取此数据并将其放入数据库的循环。但是,如果未填写其中一个字段,则会完全跳过该特定字段的值,从而丢弃数据输入。

示例:用户有三个字段,这三个字段重复三次。用户在第一行中填写三个,在第二行中填写两个,在第三行中再填充三个。 所以:

  • 第一个字段数组:1,1,1
  • 第二个字段数组:1,1
  • 第三场阵列:1,1,1

我需要想办法在第二个字段数组中标记该空字段,以便它出现在列表中。我可以将默认值设置为字段,但有人可以轻松删除该数据,在名称/标题字段中,“无”或其他东西看起来很俗气......

任何想法?

编辑: 代码片段(注意:我删除了所有不重要的样式类型的东西......)

<cfoutput query = "getType_PUB">
Publications: #rName# <br />
<input type = "hidden" name = "scholarActivities" value = "#rName#" />
<input type="text" name="inpress09"  size = "8"/><br />
<input type="text" name="published09" size = "8"/><br /> 
<input type="text" name="published08" size = "8"/><br />
<input type="text" name="published07" size = "8"/><br />
</cfoutput>

<cfoutput><input type = "hidden" name = "recordcountPub" value = "#getType_PUB.recordcount#" /></cfoutput>


//////////////DB/////////////

<cfif #form.recordcountPUB# EQ 1>
<cfquery name = "insertSActivities" datasource="cas_evaluation">
  INSERT INTO scholar_publications (faculty, scholarActivities, submit09, inpress09, published09, published08, published07)
  VALUES ( '#form.name#', '#form.scholarActivities#', '#form.submit09#', '#form.inpress09#', '#form.published09#', '#form.published08#', '#form.published07#')
  </cfquery>
<cfelse>
<cfloop from="1" to="#form.recordcountPUB#" index="i">
  <cfquery name = "insertSActivities" datasource="cas_evaluation">
  INSERT INTO scholar_publications (faculty, scholarActivities, submit09, inpress09, published09, published08, published07)
  VALUES ( '#form.name#', '#ListGetAt(form.scholarActivities, i, ',')#', '#ListGetAt(form.submit09, i, ',')#', '#ListGetAt(form.inpress09, i, ',')#', '#ListGetAt(form.published09, i, ',')#', '#ListGetAt(form.published08, i, ',')#', '#ListGetAt(form.published07, i, ',')#')
  </cfquery>
</cfloop>
</cfif>

2 个答案:

答案 0 :(得分:2)

(详细说明我的评论..)创建唯一的字段名称更安全。否则,如果用户在其中一个表单字段中输入逗号,则INSERT代码可能会中断。由于您已经在使用查询循环,因此可以将#currentRow#附加到每组字段以使名称唯一

<cfoutput query = "getType_PUB">
    Publications: #rName# <br />
   <input name="scholarActivities#CurrentRow#" ... />
   <input name="inpress09#CurrentRow#" ... />
   <input name="published09#CurrentRow#" ... />
</cfoutput>

<cfoutput>
   <input name="recordcountPub" value="#getType_PUB.recordcount#" .. />
</cfoutput>

在您的操作页面上,只需使用数组表示法循环并提取值。无需额外的CFIF。您仍然可以使用CFPARAM或structKeyExists来处理可能不存在的任何字段(即复选框或单选按钮)。

<cfloop from="1" to="#form.recordcountPUB#" index="i">
   <!--- extract the values ...--->
   <cfset scholarActivities = FORM["scholarActivities"& i]>
   <cfset submit09 = FORM["submit09"& i]>
   ... 
  <cfquery ....>
        Do the INSERT 
  </cfquery>
</cfloop>

答案 1 :(得分:1)

这些字段是什么类型的?复选框?如果是这样,您可以在操作页面上设置默认值,值为0或其他表示无应答的值。然后检查该非答案值并跳过。

或者值是否为空白,而你的循环代码根本没有将它添加到列表/数组中?

您的快速代码示例可以帮助人们为您提供更好的指导。