2011-01-07 67 views
1

我正在构建一个包含一组问题和答案的应用程序。用户会回答每个问题,最后点击“保存”按钮。在Coldfusion中插入结构数组

我希望将问题和响应的组合存储为结构数组。数组中的每个条目都是question_id和response_id的结构。

一旦用户点击'保存'按钮,我需要将条目保存在数据库中。

  • 如何将结构数组传递给cfc?
  • 我将如何处理结构数组以将其插入到数据库中?

请帮忙。

+0

到目前为止你有什么? – KobbyPemson 2011-01-07 23:08:54

回答

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

嗯,编辑器不会保留代码格式? – 2011-01-12 14:46:17