2016-05-11 3 views
0

Ich habe ein Formular mit 6 check_num Feldern, 1 Kontonummer und einem Betrag. Ich möchte diese Werte in einer Datenbanktabelle einzufügen:Wie können Formularwerte in Abhängigkeit vom Namen der Formularspalte in Schleifen umgewandelt werden?

<cfquery datasource="test" name="test"> 
    insert into test (ACCOUNT_NUMBER,check_num,amount) 
    values ('#ACCOUNT_NUMBER#','#check_num#','#amount#') 
</cfquery> 

aber ich will nicht alle Werte in 1 Zeile einzufügen. Wenn eines der check_num-Felder eine Zahl enthält, möchte ich diesen Wert zusammen mit den Werten account_number und betrag einfügen.

Zum Beispiel mit den Daten unten, möchte ich 5 Zeilen einfügen. Das Feld "check_num6" würde übersprungen, da es leer ist.

ACCOUNT_NUMBER 123456789 
CHECK_NUM1 56623 
CHECK_NUM2 5512 
CHECK_NUM3 6562 
CHECK_NUM4 653 
CHECK_NUM5 6623 
CHECK_NUM6 
AMOUNT 32.31 
FIELDNAMES ACCOUNT_NUMBER,CHECK_NUM1,CHECK_NUM2,CHECK_NUM3,CHECK_NUM4,CHECK_NUM5,CHECK_NUM6,AMOUNT,SUBMIT 
SUBMIT Submit 
+0

Was haben Sie bisher versucht? Auch wenn du nicht sarkastisch bist, hast du [in den Archiven suchen] (http://stackoverflow.com/search?q= [coldfusion] + dynamic + form), weil die Frage der Handhabung dynamischer Formularfelder sehr hoch ist *: -) – Leigh

Antwort

1

Nicht perfekt, aber Sie können etwas Inspiration von hier starten/erhalten:

<cfloop list="#StructKeyList(form)#" index="i"> 
    <cfif (left('#i#', 9) is "CHECK_NUM") and (trim(form['#i#']) is not "")> 
     <cfquery datasource="test" name="test"> 
      insert into test (ACCOUNT_NUMBER,check_num,amount) 
      values ('#ACCOUNT_NUMBER#','#form['#i#']#','#amount#') 
     </cfquery> 
    </cfif> 
</cfloop> 

Auch sollten Sie bestätigen, ob Ihre DB mehrere Einsätze unterstützt, ändern Sie Ihre Abfrage cfqueryparam zu verwenden, ist es der Forschung über . Also, ein besserer cfquery Code wäre:

<cfquery datasource="test" name="test"> 
    insert into test (
     ACCOUNT_NUMBER, 
     check_num, 
     amount 
    ) 
    values (
     <cfqueryparam cfsqltype="cf_sql_varchar" value="#form.ACCOUNT_NUMBER#">, 
     <cfqueryparam cfsqltype="cf_sql_varchar" value="#form['#i#']#">, 
     <cfqueryparam cfsqltype="cf_sql_varchar" value="#form.amount#"> 
    ) 
</cfquery> 
+3

1) Vergessen Sie nicht, alle Variablen zu erfassen 2) Entfernen Sie die überflüssigen '#' Zeichen 3) Variablennamen wie "fieldName" sind intuitiver als "i". 4) Falls sie mit cfqueryparam nicht vertraut sind, wäre es gut, dies in das Beispiel aufzunehmen, um die ordnungsgemäße Verwendung zu demonstrieren. (Obwohl ich ehrlich gesagt nur als Duplikat abstimmen wollte, da die Frage schon oft gestellt und beantwortet wurde ;-) – Leigh

+0

@Leigh, ich bin bei dir, der Code funktioniert aber braucht Recherche und Arbeit, so lernst du. –

+2

Ja, aber denken Sie daran, dass die Menschen auch von dem lernen, was wir ihnen zeigen. Es ist sehr wahrscheinlich, dass dieser Beitrag in Zukunft von vielen anderen gelesen wird, von denen einige (noch) nicht wissen oder verstehen, was verbessert werden könnte und warum. Der beste Weg, gute Praktiken in anderen zu fördern, ist, sie in unseren Antworten zu demonstrieren (vor allem mit kleinen Code-Schnipsel) :-) – Leigh