0

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

示例:用户有三个字段,这三个字段重复了 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>
4

2 回答 2

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>
于 2010-10-21T20:16:44.300 回答
1

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

还是将值作为空白传递,而您的循环代码根本没有将其添加到列表/数组中?

您提供的一个快速代码示例可以帮助人们为您提供更好的方向。

于 2010-10-21T14:22:50.283 回答