2011-01-07 3 views
1

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

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

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

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

Просьба помочь.

+0

Что у вас есть? – KobbyPemson

ответ

2

В качестве формы каждое поле является частью области 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 
    }); 
}); 

Вывесит следующие Params:

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> 

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

+0

hmmm, редактор не поддерживает форматирование кода? –

+0

Исправлено это для вас. –

Смежные вопросы