基本上,我有一个表单,在填写此表单之前根据“部门”输入生成一定数量的“出版物类型”。 (部门特定的发布类型被识别。)每个发布类型都有几个字段...(它们是相同的字段,所以每种类型都有...让3个字段..)我有一个读取此数据并将其放入数据库的循环。但是,如果未填写其中一个字段,则会完全跳过该特定字段的值,从而丢弃数据输入。
示例:用户有三个字段,这三个字段重复三次。用户在第一行中填写三个,在第二行中填写两个,在第三行中再填充三个。 所以:
我需要想办法在第二个字段数组中标记该空字段,以便它出现在列表中。我可以将默认值设置为字段,但有人可以轻松删除该数据,在名称/标题字段中,“无”或其他东西看起来很俗气......
任何想法?
编辑: 代码片段(注意:我删除了所有不重要的样式类型的东西......)
<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>
答案 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或其他表示无应答的值。然后检查该非答案值并跳过。
或者值是否为空白,而你的循环代码根本没有将它添加到列表/数组中?
您的快速代码示例可以帮助人们为您提供更好的指导。