2011-01-07 32 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

あなたのためにそれを修正しました。 –