2012-04-13 11 views
0

Ich versuche, Werte von einem CFLOOP herauszuziehen und sie abzuwerfen, aber ich scheine etwas zu fehlen. Ich muss openHours von der ersten Schleife und openMinutes von der Sekunde extrahieren und sie in Variablen setzen, die dann Führen Sie eine Abfrage zum Übermitteln der Werte in der Datenbank aus.Werte von CFLOOP erhalten

Dies ist meine Struktur, wenn ich # Form # entleere. Ich brauche die Variable form.openHours1 das Problem zu bekommen, ist, dass openHours seine Nummer wird von # CountVar # also im Grunde muss ich so etwas wie # form.openHours auskippen [CountVar] #

struct 
FIELDNAMES POSTITNOW,OPENHOURS1,OPENHOURS2,OPENHOURS3,OPENHOURS4,OPENHOURS5,OPENHOURS6,OPENHOURS7 
OPENHOURS1 13 
OPENHOURS2 13 
OPENHOURS3 12 
OPENHOURS4 0 
OPENHOURS5 0 
OPENHOURS6 0 
OPENHOURS7 0 
POSTITNOW YES 
+0

Damit wir Ihnen helfen können, müssen Sie den Code auf seine bloße Essenz destillieren. Lass nur die Dinge, die ein Problem verursachen; Entfernen Sie alle zusätzlichen Anzeigelogik. – ale

+0

Danke, ich werde jetzt aufräumen – Geo

+0

Es wäre auch hilfreich, ein Beispiel dafür zu sehen, wie Ihre Daten aussehen. – ale

Antwort

0

Ich glaube, Sie dies wollen, oder etwas sehr ähnlich:

<cfoutput> 
<cfloop from="1" to="7" index="CountVar">   
    #openHours[CountVar]#<br> 
</cfloop> 
</cfoutput> 
+0

Ich habe das schon probiert. Ich habe auch versucht '' aber es hat nicht funktioniert. Es hat mir einfach mehr Informationen gegeben, wie uns 'openHours1 [24]' – Geo

1

Anstatt #form.openHours[CountVar]#, was Sie wollen, ist:

form["openHours" & CountVar] 

als Umfang, Form ist auch eine Struktur und Sie können Array-Notation zu erhalten bei den Werten.

Dies ist der Schlüssel zum Arbeiten mit dynamischen Formularfeldnamen.

Zur Klarstellung:

form.openHours7 

entspricht

form["openHours7"] 

Der erste wird im allgemeinen als Punkt-Notation bekannt ist, ähnelt die zweite als Array-Notation (da es, wie Sie auf Array-Elemente verweisen .

Da der Wert in der Klammer eine Zeichenkette ist, können Sie sie durch eine Variable ersetzen

<cfset fieldToUse = "openHours7"> 
<cfoutput>#form[fieldToUse]#</cfoutput> 

Oder, wie ich mit öffnete, eine Kombination aus einem Literal String und einer Variablen.

Mit der Punktnotation ist das nicht möglich. (Zumindest nicht ohne evaluate(), was im Allgemeinen nicht empfohlen wird.)

The documentation hat viele Informationen darüber, wie man mit Strukturen arbeitet, einschließlich der verschiedenen Notationsmethoden.

+0

können Sie es ein bisschen klarer machen? Ich kenne diese Notation nicht. Danke – Geo

+0

@Crematorio: Sicher. Ist das besser? – ale

+0

Ja viel klarer. Ich habe noch nicht viel Erfahrung mit CF, also vielen Dank für die Erklärung alles – Geo

0

Tut mir leid, das ist ein bisschen trübe für mich, aber das hat mich nie davon abgehalten, hineinzuspringen. Werden Sie eine gleiche Anzahl von Openhours und Openminutes haben? Kannst du einfach form.fieldnames durchlaufen? So wie es jetzt aussieht, haben Sie Felder namens openhours1-N, es klingt wie openminutes1-N ist noch hinzuzufügen. Es scheint, dass Sie Feldnamen überlappen können, wenn das Feld mit openhours beginnt, erhalten Sie die Nummer vom Ende und dann können Sie leicht das entsprechende openminutes Feld erstellen. Wie Al (viel) früher sagte, würden Sie dann höchstwahrscheinlich Array-Notation verwenden, um die Werte aus der Formularstruktur herauszuholen.

Ein weiterer Gedanke ist, dass Formularfeldnamen nicht eindeutig sein müssen. Wenn Sie mehrere Vorkommnisse von "openhours" hatten, würde ColdFusion das in eine Liste für Sie umwandeln, dann könnten Sie diese Liste einfach durchlaufen.

+0

Danke für Ihre Antwort. Ich arbeite daran, den Code auf diesem neu zu schreiben, weil ich eine frühere Version eines ähnlichen Codes, den ich hatte, verwendet habe, deshalb habe ich so viele Probleme. Ich werde diesen Beitrag aktualisieren, wenn ich fertig bin. Danke noch einmal – Geo