检查是否使用名称中的变量定义了表单字段

时间:2010-08-16 18:47:32

标签: forms dynamic coldfusion

我这里有一个有趣的问题......

<cfloop from="1" to="#form.countField#" index="i">
<cfif isdefined('form["semester#i#"]')>
  <cfquery name = "insertCourses" datasource="cas_evaluation">
  INSERT INTO courses (faculty, semester, course, students, hours, team_taught, first_time, ec_dl, online, course_revision )
  VALUES ( '#form.name#', '#form['semester#i#']#', '#form['course#i#']#', '#form['numstudents#i#']#', '#form['hours#i#']#', '#form['team#i#']#', '#form['firsttime#i#']#', '#form['ec_dl#i#']#', '#form['online#i#']#', '#form['revision#i#']#')
  </cfquery>
 </cfif>
</cfloop>

基本上,我有一些可以添加或删除的动态字段。 (这些是字段行btw ...)我编码的方式...如果用户删除中间的一行...(他们删除第2行,第1行和第3行留下......)问题因为循环正在寻找它但显然不存在。所以我尝试检查是否有一个字段被定义...但它不喜欢isdefined变量的语法.. :(

有什么建议吗?

3 个答案:

答案 0 :(得分:9)

我不太明白这个问题。所以这不起作用?

<cfif isdefined('form["semester#i#"]')>

使用

<cfif structKeyExists(form, "semester#i#")>

cfparam和isDefined不喜欢数组样式语法。在您的情况下,您也可以使用:

<cfif isdefined('form.semester#i#')>

就个人而言,这不是我喜欢的风格,但它应该可以正常工作。

答案 1 :(得分:2)

将Form范围用作结构。如果使用structKeyList(form),您将获得定义的每个表单字段的列表。

答案 2 :(得分:0)

另外,请确保使用cfqueryparam来转义sql变量。你现在的代码充满了sql注入漏洞。这段代码应该有效,应该是安全的。

<cfloop from="1" to="#form.countField#" index="i">
  <cfif structKeyExists(form, 'semester#i#')>
    <cfquery name = "insertCourses" datasource="cas_evaluation">
      INSERT INTO courses
        (faculty, semester, course, students, hours, team_taught, first_time, ec_dl, online, course_revision)
      VALUES
        ( <cfqueryparam cfsqltype='cf_sql_varchar' value='#form.name#' />
        , <cfqueryparam cfsqltype='cf_sql_varchar' value='#form['semester#i#']#' />
        , <cfqueryparam cfsqltype='cf_sql_varchar' value='#form['course#i#']#' />
        , <cfqueryparam cfsqltype='cf_sql_varchar' value='#form['numstudents#i#']#' />
        , <cfqueryparam cfsqltype='cf_sql_varchar' value='#form['hours#i#']#' />
        , <cfqueryparam cfsqltype='cf_sql_varchar' value='#form['team#i#']#' />
        , <cfqueryparam cfsqltype='cf_sql_varchar' value='#form['firsttime#i#']#' />
        , <cfqueryparam cfsqltype='cf_sql_varchar' value='#form['ec_dl#i#']#' />
        , <cfqueryparam cfsqltype='cf_sql_varchar' value='#form['online#i#']#' />
        , <cfqueryparam cfsqltype='cf_sql_varchar' value='#form['revision#i#']#' />
        );
    </cfquery>
  </cfif>
</cfloop>