Проверьте, определено ли поле формы с переменной в имени - PullRequest
3 голосов
/ 16 августа 2010

У меня здесь интересная проблема ...

<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 .. :(

есть предложения?

Ответы [ 3 ]

9 голосов
/ 16 августа 2010

Я не совсем понимаю вопрос. Так это не работает?

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

Используйте

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

cfparam и isDefined не любят синтаксис стиля массива. В вашем случае вы также можете использовать:

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

Лично мне не нравится этот стиль, но он должен работать нормально.

2 голосов
/ 16 августа 2010

Используйте область формы как структуру. Если вы используете structKeyList (form), вы получите список всех определенных полей формы.

0 голосов
/ 16 августа 2010

Также убедитесь, что вы используете cfqueryparam для экранирования переменных 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>
...