没有代码真的很难提供帮助。当您询问有关代码的问题时,提供相关代码通常会很有帮助。
在我继续之前,我还可以看到保留旧答案的价值,您可以绘制用户如何显示数据的图表。
如果你的表格是简单格式
Answers
AnswerID | StudentID | Answer1 | Answer2 | ... | Answer10
提交 update.cfm 后,此代码将起作用
<cfquery...>
delete from Answers
where StudentID = <cfqueryparam cfsqltype="cf_sql_integer" value="#session.studentID#">
</cfquery>
<cfquery...>
insert into Answers(StudentID,Answer1,Answer2,...,Answer10)
values (<cfqueryparam cfsqltype="cf_sql_integer" value="#session.studentID#">,
<cfqueryparam cfsqltype="cf_sql_varchar" value="#form.Answer1#">,
<cfqueryparam cfsqltype="cf_sql_varchar" value="#form.Answer2#">,
<cfqueryparam cfsqltype="cf_sql_varchar" value="#form.Answer10#">)
</cfquery>
(如果您不使用cfqueryparam,则需要。它可以防止sql注入。)
就我个人而言,我可能不会删除旧数据,我会给它加上日期戳并跟踪它,但这不是我的应用程序。
现在,更好的方法是使用三/五张桌子。它更复杂,但它是处理自定义答案和
的最佳方式
Students (or users table, whatever you call it)
StudentID, Name, Zipcode ...
Questions
QuestionID | QuestionSetID | QuestionText
----[sample data]------------------------
1 | 1 | What is your age
2 | 1 | How quickly do you expect to find a job in your field
Answers
AnswerID | StudentID | QuestionID | AnswerText
QuestionSetNames
QuestionSetID | QuestionSetName=
1 | "Psych Degree question set"
2 | "Computer Science question set"
首先,您将/可以创建一个 QuestionSets,因为正如您所说,您会根据所提供的输入提供不同的问题。
问题不必是问题集独有的。您可以在任何问题集中包含任何问题。
因此,通过问题表中的问题,您可以决定要向某人提问的问题集。并像这样查询它
<cfquery...name="GetQuestions">
select * from Questions
where QuestionSetID = <cfqueryparam cfsqltype="cf_sql_integer" value="#setID#">
</cfquery>
<form...><cfoutput><input type="hidden" name="Questions" value="#valuelist(GetQuestions.QUestion)#"></cfoutput>
<cfoutput query="GetQuestions">
#QuestionText#:<br />
<input type="text" name="AnswerForQ_#questionID#"...>
</cfoutput></form>
处理
<cfloop list="#form.Questions#" index="i">
<cfquery...>
delete from Answers
where StudentID = <cfqueryparam cfsqltype="cf_sql_integer" value="#session.studentID#">
</cfquery>
<cfquery...>
INSERT INTO Answers(StudentID,QuestionID,AnswerText)
values(<cfqueryparam cfsqltype="cf_sql_integer" value="#session.studentID#">,
<cfqueryparam cfsqltype="cf_sql_integer" value="#i#">,
<cfqueryparam cfsqltype="cf_sql_varchar" value="#form["AnswerForQ_#i#"]#">)
</cfquery>
</cfloop>
然后你可以用
查询
<cfquery name="GetAnswers">
select QuestionText,AnswerText from Answers,Questions
where StudentID = <cfqueryparam cfsqltype="cf_sql_integer" value="#session.studentID#">
and Answers.AnswerID = Questions.QuestionID
</cfquery>
<cfoutput>#QuestionText#: #AnswerText#<br /></cfoutput>
您仍然需要编写大量代码,主要是添加问题/问题集的管理能力。
您可以向 Answers 表添加一个时间戳(同一提交的所有答案都将共享),或者您可以制作一个中间 AnswerSheets 表来保存时间戳并将相应的 AnswerSheetID 添加到 Answers。
这似乎是一项不错的工作,但当您尝试添加问题集或尝试分析数据时,它确实会有所回报。另外,一旦它到位,其他人就可以管理它。所以现在的工作更多,以后的工作更少。