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

时间:2014-10-20 20:39:24

标签: mysql coldfusion survey

我根据他们的毕业生计划对毕业的大学毕业生进行调查。我不确定如何重置或清除更新页面的特定字段。

pg1.cfm,用户使用他们的学生ID登录。从与其ID相关的数据中自动填充多个字段,例如major和GPA。

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

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

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

1 个答案:

答案 0 :(得分:0)

没有代码就很难提供帮助。当您询问有关代码的问题时,提供相关代码通常非常有用。

在继续之前,我可以看到保留旧答案的价值,您可以绘制用户显示数据的方式。

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

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"

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

问题不必是问题集的唯一问题。您可以在任何问题集中包含任何问题。

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

<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。

看起来似乎还有更多的工作,但是当你试图添加到问题集或者更多地尝试分析数据时,它确实会得到回报。此外,一旦它到位,其他人可以管理它。所以现在更多的工作,以后的工作更少。