【问题标题】:Check if a form field is defined with a variable in the name检查表单字段是否使用名称中的变量定义
【发布时间】:2011-03-30 14:27:42
【问题描述】:

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

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

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

有什么建议吗?

【问题讨论】:

    标签: forms dynamic coldfusion


    【解决方案1】:

    我不太明白这个问题。所以这行不通?

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

    使用

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

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

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

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

    【讨论】:

    • 有时这不起作用 - 我目前正在尝试查看是否在我的表单中选中了一个复选框。如果未选中该框,则该值不会被传递,并且当我尝试在未选中该框时执行 时,我收到一个错误,即复选框未定义。
    • 哇,好久没有想到CF了!在我开始之前,我曾经使用 cfparam 来提供默认值以有效地将所有缺少的复选框设置为默认值 false。
    【解决方案2】:

    像结构一样使用 Form 范围。如果你使用 structKeyList(form),你会得到一个定义的每个表单字段的列表。

    【讨论】:

    • 你能举个例子吗? :)
    • 这会将表单作为结构循环: form.#key# 的值是#form[key] #
    【解决方案3】:

    另外,请确保您使用 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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-22
      • 2018-09-09
      • 1970-01-01
      • 2014-01-10
      • 1970-01-01
      • 2013-05-19
      • 2021-04-21
      相关资源
      最近更新 更多