En tant que formulaire, chaque champ fait partie de la portée FORM
lors de la soumission par défaut. Cette portée est une structure simple (c'est-à-dire FORM = {question_id: value, response_id: value}
) à partir de laquelle vous pouvez facilement référencer chaque élément: (pour la sortie) <cfoutput>#FORM.question_id#</cfoutput>
. Donc, disons que vous aviez 10 questions, et qu'il y aurait toujours une réponse. Tout d'abord, vous avez un champ de formulaire caché pour chaque question:
<input type="hidden" name="questionId_01" value="01" />
<input type="hidden" name="questionId_02" value="02" />
Notez que chaque champ a un nom différent. Ceci est nécessaire pour obtenir une référence unique à chaque champ. Vous créez ensuite les champs de saisie correspondants pour chaque question. Dites que c'était des questions à choix multiples, et vous utilisiez des boutons radio. Vous souhaitez créer vos champs avec le même nom, mais les valeurs de choix:
<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" />
Envoi de votre formulaire passeriez ces paires nom/valeur en tant que simples au serveur. Je vois la balise jQuery attachée à votre question (bien que vous ne la mentionniez pas), donc je suppose que vous faites une soumission Ajax. La plupart des gens utilisent $.serializeArray()
pour mettre leurs données de formulaire dans un format pour les données ajax. C'est la manière simple de le manipuler.
$('myForm').submit(function(e){
e.preventDefault();
$.ajax({
url: 'myProcessor.cfc?method=processForm&returnformat=JSON',
data: $(this).serializeArray(),
success: callbackFunctionName
});
});
afficherons les params suivantes:
questionId_01 01
questionId_02 02
responseId_01 b
responseId_02 a
method processForm
returnformat JSON
Donc, vous n'avez pas le tableau de structures que vous recherchez côté serveur encore. Vous pouvez faire un traitement côté serveur pour rendre vos tableaux en boucle sur la portée 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>
Maintenant vous avez un tableau de struct que vous recherchez. Vous pouvez ensuite boucler le tableau et effectuer vos insertions.
Qu'avez-vous jusqu'à présent? – KobbyPemson