2011-01-07 3 views
1

Je construis une application qui a un ensemble de questions et de réponses. Un utilisateur répondra à chaque question et enfin cliquera sur le bouton «enregistrer».Insérer tableau de structures dans Coldfusion

Je souhaite stocker la combinaison de la question et de la réponse sous forme de tableau de structures. Chaque entrée dans le tableau serait une structure de question_id et de response_id. Une fois que l'utilisateur clique sur le bouton «Sauvegarder», j'ai besoin de sauvegarder les entrées dans la base de données.

  • Comment passer le tableau de structures à un cfc?
  • Comment est-ce que je traiterais le tableau de structures pour les insérer dans la base de données?

Aidez-nous s'il vous plaît.

+0

Qu'avez-vous jusqu'à présent? – KobbyPemson

Répondre

2

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.

+0

hmmm, l'éditeur ne conserve pas le formatage du code? –

+0

L'a corrigé pour vous. –