Вставить массив структур в Coldfusion - PullRequest
1 голос
/ 07 января 2011

Я создаю приложение, в котором есть набор вопросов и ответов. Пользователь отвечал на каждый вопрос и, наконец, нажимал кнопку «Сохранить».

Я хочу сохранить комбинацию вопроса и ответа в виде массива структур. Каждая запись в массиве будет представлять собой структуру question_id и response_id.

Как только пользователь нажмет кнопку «Сохранить», мне нужно сохранить записи в базе данных.

  • Как мне передать массив структур в cfc?
  • Как мне обработать массив структур для вставки их в базу данных?

Пожалуйста, помогите.

1 Ответ

2 голосов
/ 12 января 2011

Как форма, каждое поле является частью области FORM после отправки по умолчанию. Эта область представляет собой простую структуру (т.е. FORM = {question_id: value, response_id: value}), из которой вы можете легко ссылаться на каждый элемент: (для вывода) <cfoutput>#FORM.question_id#</cfoutput>.

Итак, скажем, у вас было 10 вопросов, и что всегда будет ответ. Во-первых, у вас будет скрытое поле формы для каждого вопроса:

<input type="hidden" name="questionId_01" value="01" />
<input type="hidden" name="questionId_02" value="02" />

Обратите внимание, что каждое поле имеет другое имя. Это необходимо для получения уникальной ссылки на каждое поле. Затем вы создаете соответствующие поля ввода для каждого вопроса. Скажем, это были вопросы с несколькими вариантами ответов, а вы использовали радио-кнопки. Вы бы создали свои поля с тем же именем, но со значениями выбора:

<input type="radio" name="responseId_01" value="a" />
<input type="radio" name="responseId_01" value="b" />
<input type="radio" name="responseId_01" value="c" />

<input type="radio" name="responseId_02" value="a" />
<input type="radio" name="responseId_02" value="b" />
<input type="radio" name="responseId_02" value="c" />

Отправка вашей формы передаст их в виде простых пар имя / значение на сервер. Я вижу тег jQuery, прикрепленный к вашему вопросу (хотя вы его не упомянули), поэтому я предполагаю, что вы делаете Ajax-представление. Большинство людей используют $.serializeArray(), чтобы поместить данные формы в формат для данных ajax. Это простой способ справиться с этим.

$('myForm').submit(function(e){
  e.preventDefault();

  $.ajax({
    url: 'myProcessor.cfc?method=processForm&returnformat=JSON',
    data: $(this).serializeArray(),
    success: callbackFunctionName
  });
});

Опубликует следующие параметры:

questionId_01   01
questionId_02   02
responseId_01   b
responseId_02   a

method   processForm
returnformat   JSON

Итак, у вас еще нет массива структур, которые вы ищете на стороне сервера. Вы можете выполнить некоторую обработку на стороне сервера, чтобы создать массивы, зацикливая область действия ARGUMENTS:

<cfscript>
  LOCAL.processArr = ArrayNew(1);

  for (LOCAL.i in ARGUMENTS){
    if (FindNoCase('questionId',LOCAL.i)){
      LOCAL.tmpArr = ListToArray(LOCAL.i,'_'); // get the Id to find response entity
      LOCAL.tmpStr = {questionId = ARGUMENTS[LOCAL.i], responseId = ARGUMENTS['responseId_' & LOCAL.tmpArr[2]]}; // CF arrays start at 1
      ArrayAppend(LOCAL.processArr, Duplicate(LOCAL.tmpStr));
    }
  }
</cfscript>

Теперь у вас есть массив структур, которые вы искали. Затем вы можете зациклить массив и выполнить вставку.

...