gpt4 book ai didi

mysql - ColdFusion:如何清除数据库行中的特定字段

转载 作者:行者123 更新时间:2023-11-29 23:33:13 26 4
gpt4 key购买 nike

我正在为已毕业的大学毕业生进行一项调查,以根据他们的毕业后计划填写。我不确定如何重置或清除更新页面的特定字段。

pg1.cfm,用户使用学生ID登录。多个字段是根据与其 ID 相关的数据自动填充的,例如专业和 GPA。

pg2.cfm,用户回答了一系列有关其毕业后计划的问题。根据他们对第一个问题的回答显示不同的问题。如果问题已得到解答,则会出现一个简介,指导用户在 update.cfm 上更新他们的计划。

pg3.cfm,使用 pg2.cfm 的答案更新数据库,并询问更多有关实习机会的问题。

update.cfm,显示了来自 pg2.cfm 的相同问题。按照目前的情况,update.cfm 将新响应附加到数据库字段,而不是替换现有答案。由于调查的性质 - 根据用户回答的问题字段集填写不同的字段 - 我认为最有效的方法是在提交表单时清除所有可能的基于问题的字段,然后重新填充它们有了新的答案。我只是不确定如何。

最佳答案

如果没有代码,真的很难提供帮助。当您询问有关代码的问题时,提供相关代码通常会很有帮助。

在继续之前,我也看到了保留旧答案的值(value),您可以绘制用户如何显示数据的图表。

如果您的表格采用简单格式

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 注入(inject)。)

就我个人而言,我可能不会删除旧数据,我会对其进行日期标记并跟踪它,但这不是我的应用程序。

现在,更好的方法是使用三/五个表。它更复杂,但它是处理自定义答案的最佳方式和

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"

首先,您将/可以创建一个问题集,因为正如您所说,您根据提供的输入提供不同的问题。

问题不必是问题集所特有的。您可以在任何问题集中包含任何问题。

因此,通过问题表中的问题,您可以决定要问某人的问题集。并像这样查询它

<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 表来保存时间戳并向 Answers 添加相应的 AnswerSheetID。

这可能看起来需要多做一些工作,但当您尝试添加问题集或者尝试分析数据时,它确实会带来返回。另外,一旦到位,其他人就可以对其进行管理。所以现在的工作多,以后的工作少。

关于mysql - ColdFusion:如何清除数据库行中的特定字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26474521/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com