1

一連の質問と回答を持つアプリケーションを構築しています。ユーザーは各質問に回答し、最後に「保存」ボタンをクリックします。

質問と回答の組み合わせを構造体の配列として保存したいと思います。配列内の各エントリは、question_id と response_id の構造になります。

ユーザーが「保存」ボタンをクリックしたら、データベースにエントリを保存する必要があります。

  • 構造体の配列を cfc に渡すにはどうすればよいですか?
  • 構造体の配列を処理してデータベースに挿入するにはどうすればよいですか?

助けてください。

4

1 に答える 1

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 タグが添付されているのがわかります (あなたはそれについて言及していませんが)。ほとんどの人は$.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>

これで、探していた構造体の配列ができました。その後、配列をループして挿入を実行できます。

于 2011-01-12T14:45:47.587 に答える