我有一些表单代码可以动态创建表单控件。我需要将每个动态生成的表单字段插入到单独的表行中:例如,如果为表单派生了5个问题,则用户将输入答案,需要将问题和答案插入表格问题:questionID,answers。
如何循环FORM
以获取结果?这就是我试过的:
<cfform name="form" method="post" action="TestQA.cfm">
<table border="0">
<tr>
<td> </td>
<td>question</td>
<td> </td>
</tr>
<cfoutput query="rsQuestions">
<tr>
<td><cfinput type="hidden" name="question_id"
id="question_id"
value="#rsQuestions.question_id#">
</td>
<td>#rsQuestions.question#</td>
<td>
<cfif #rsQuestions.question_type_id# eq 1>
<cfinput type="text" name="answer"
message="#rsQuestions.Message#"
tooltip="#rsQuestions.Tooltip#"
range="#rsQuestions.range#"
required="Yes"
size="#rsQuestions.Size#"
method="Post">
</cfif>
</td>
</tr>
</cfoutput>
<tr>
<td> </td>
<td> </td>
<td><cfinput type="submit" name="Submit" value="Submit"></td>
</tr>
</table>
<br />
</cfform>
将问题插入表格的程序:
<cfloop collection=#form# item="field">
<cfif field neq 'submit'>
<cfquery datasource="dstest">
INSERT INTO dbo.group_member_questionnaire_answers (question_id, answer)
VALUES(#form.Question_ID#, #form.Answer#)
</cfquery>
</cfif>
</cfloop>
<cfoutput>Answers inserted successfully into database</cfoutput>
我已经调整了声明:
<cfloop from="1" to="#val(form.TotalFields)#" index="x">
<cfquery datasource="dsED">
INSERT INTO dbo.group_member_questionnaire_answers (question_id, answer)
VALUES(#form.Question_ID#, #form.Answer#)
</cfquery>
</cfloop>
This is the result: Error Executing Database Query.
[Macromedia][SQLServer JDBC Driver][SQLServer]Invalid column name 'no'.
The error occurred in
7 : <cfquery datasource="dstest">
8 : INSERT INTO dbo.group_member_questionnaire_answers (question_id, answer)
9 : VALUES(#form.Question_ID#, #form.Answer#)
10 : </cfquery>
11 :
________________________________________
SQL INSERT INTO dbo.group_member_questionnaire_answers (question_id, answer) VALUES(62,63, 90,no)
DATASOURCE dsED
VENDORERRORCODE 207
SQLSTATE 42S22
Resources:
答案 0 :(得分:0)
您的问题是您为每个问题/答案输入字段使用相同的ID。所以最多你会得到一个像这样的列表:
question_id = 1,2,3,4,5
answer = foo,foo,foo,foo,bar
相反,更好的方法是根据问题ID为每个答案提供自己的ID。然后,您可以在表单处理程序中轻松地遍历这些。
这不是一种特别复杂的方法,但应该给你基本的想法:
<!--- 1 hidden field with all the IDs --->
<cfoutput><input type="hidden" name="question_ids" id="question_ids" value="#valueList(rsQuestions.question_id)#"></cfoutput>
<cfoutput query="rsQuestions">
<tr>
<td></td>
<td>#rsQuestions.question#</td>
<td>
<cfif rsQuestions.question_type_id eq 1>
<cfinput type="text" name="answer_#rsQuestions.question_id#"
message="#rsQuestions.Message#"
tooltip="#rsQuestions.Tooltip#"
range="#rsQuestions.range#"
required="Yes"
size="#rsQuestions.Size#">
</cfif>
</td>
</tr>
</cfoutput>
然后遍历该隐藏的表单,为每个表单插入问题/答案:
<cfloop list="#form.question_ids#" index="question">
<cfquery datasource="dstest">
INSERT INTO dbo.group_member_questionnaire_answers (question_id, answer)
VALUES(<cfqueryparam value="#question#" cfsqltype="CF_SQL_INTEGER">, <cfqueryparam value="#form['answer_' & question]#" cfsqltype="CF_SQL_VARCHAR">)
</cfquery>
</cfloop>
PS:您通常不需要## in标签,即<cfif #rsQuestions.question_type_id# eq 1>
可以写为<cfif rsQuestions.question_type_id eq 1>
cfinput标记上没有method
属性。