2012-04-13 6 views
0

Ich versuche, ein Array in ColdFusion zu erstellen, das in einer Sitzungsvariablen gespeichert ist. Ich habe ein HTML-Formular, das die Eingabe an die Aktionsseite übergibt und im Array speichert. aber ich habe Probleme, vor allem beim Setzen des Arrays, ich habe versucht, mit cfif zu überprüfen, ob das Array definiert wurde oder nicht, aber es hat nicht funktioniert. HierWie erstellt man ein Array, das Formulareingabe in einer Sitzungsvariablen mit ColdFusion speichert?

ist das HTML-Formular:

<form name="input" action="html_form_action.cfm" method="post"> 
id <input type="text" name="id" /> 
<input type="submit" value="Submit" /> 
</form> 

Hier ist der Coldfusion-Code:

<cfapplication name="arrays" clientmanagement="Yes" sessionmanagement="Yes"> 

<cfif isDefined('form.id')> 
<cfset session.urlid = form.id> 


<cfset myArray = arrayNew(1)> 

<cfset session.arrData[(arrayLen(session.arrData)+1)] = #session.urlid#> 
</cfif> 


<cfloop array=#session.arrData# index="name"> 
<cfoutput> 
<form name="input"> 
item<input type="text" name="id" placeholder=#name#> 

</form> 
</cfoutput> 
</cfloop> 

Ich frage mich, wie konnte ich auch ungesetzt die Sitzung, so dass es entfernt alles aus dem Array, ich habe die ColdFusion-Dokumentation gelesen und kann nicht sehen, wie ich das machen kann. Ich habe das in PHP gemacht, es funktioniert großartig. Ich dachte, ColdFusion wäre einfacher, aber ich denke, das Fehlen von Ressourcen macht es schwierig. Ich würde mich über jeden Rat freuen, wie man das funktioniert. Danke.

+0

Was möchten Sie erreichen?Ich zerreiße mein Gehirn, um hier einen Anwendungsfall zu finden. – ale

+0

Ich versuche, Elemente zu einem Array hinzuzufügen, das in einer Sitzung gespeichert wird. Jedes Mal, wenn ein neues Element sagt, dass eine Nummer oder ein Name hinzugefügt wurde, werden alle Elemente im Array angezeigt, bis die Sitzung inaktiv ist. Ich habe Probleme mit ColdFusion :( THanks! – deucalion0

+0

Nach der Einstellung "myArray" können Sie es nirgendwo verwenden und mit session.arrData weitermachen. Also .. was ist der Punkt von myArray? –

Antwort

1

Es existieren scheint, wie das ist, was Sie zu tun versuchen.

<cfparam name="form.id" default="0"/> 
<cfset session.urlID = form.id/> 

<cfif NOT structKeyExists(session,'arrData')> 
    <cfset session.arrData = arrayNew(1)/> 
</cfif> 

<cfset arrayAppend(session.arrData,session.urlId)/> 

Aber es ist immer noch ein wenig zweifelhaft. Sie speichern die ID in der Sitzung als URLID und kopieren sie dann in einen Index von arrData (in der Sitzung). Wenn session.urlID jemals mehr als einen primitiven Wert enthält, werden Sie mit einem Zirkelbezug enden, denke ich. Immer noch ... Ich denke, dass das oben ist, was Sie vielleicht versuchen.

+0

Vielen Dank für Ihren Vorschlag! Ich habe es versucht und den Fehler erhalten: Variable ARRAYAPEND ist undefined. Irgendeine Idee warum? Dank! – deucalion0

+0

Das kleine Code-Snippet wird funktionieren ... Wenn Sie einen Fehler bekommen, liegt es daran, dass etwas anderes nicht stimmt. Es tut uns leid. –

+0

Sorry ... 2 "p" s in append .... sollte arrayAppend (... doh! –

1

Ich bin mir nicht ganz sicher, was deine erste Frage genau ist, aber ich gebe ihr mein Bestes!

Da Sie nicht sicher sind, ob die form.id existiert oder nicht, würde ich in das "cfparam" -Tag schauen. Dies definiert einen erwarteten Parameter der Seite action.cfm.

<cfparam name="form.id" default="0" type="integer" /> 

Dann können Sie überprüfen, ob form.id GT 0, wenn Sie dies wünschen ...?

Wie für ein Array in Coldfusion-Einstellung, Sie sind fast da ... Sie erstellt das neue Array Das ist sehr gut ... Aber Sie wirklich brauchen nicht die ganze Zahl für jeden Array-Wert zu definieren .. verwenden Sie einfach . Session-Variable

<cfset arrayAppend(session.arrayVar,variableToAppend) /> 

Wie bei "Entschärfen"

... Die meisten Menschen

<cfset structDelete(session,'arrData') /> 

nur tun, ich hoffe, ich habe nichts verpassen ... Wenn Sie brauche noch etwas - lass es mich wissen.

+0

Hallo! Vielen Dank für Ihre Antwort, Ich bin mir nicht sicher, wie ich die zweite Codezeile verwenden soll, welche Codezeile ich in dem von mir geposteten Code ersetze Sorry ColdFusion verwechselt mich manchmal! Ersetzt es diese Zeile: deucalion0

+0

Ja, es wird das Element automatisch auf die nächste verfügbare Zahl im Array setzen, die einzige Einschränkung ist, dass Sie sicherstellen müssen, dass Ihr Array zuerst definiert wird die Coldfusion Docs, sie sind sehr hilfreich! http://help.adobe.com/de_DE/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec1a60c-7ffc.html # WSc3ff6d0ea77859461 172e0811cbec22c24-6a66 – Busches

+0

Danke, ich lese die Dokumente durch, sie sind hilfreich, aber ein bisschen zu viel, um sie für einen Anfänger bei ColdFusion aufzunehmen. Ich habe versucht, das Array zu definieren, aber wirklich Mühe, es zum Laufen zu bringen, versuchte ich ArrayIsDefined. Hier ist mein Code jetzt, verwende ich Ihren Vorschlag richtig? Ich bekomme jetzt den Fehler: Element ARRDATA ist in SESSION nicht definiert. Mein Code: \t \t deucalion0

0

Versuchen Sie nur, die Formulare im Sitzungsumfang zu speichern? Wenn ja, müssen Sie einfach cfset session.formname = Formular oder verwenden Sie die Funktion structcopy, um die Formularstruktur in Ihre Sitzung zu kopieren.

Um es zu löschen, verwenden Sie structclear Funktion. zu überprüfen, ob sie die Verwendung cfif StructKeyExists (Umfang, „var“)

HTH

+0

Vielen Dank für Ihren Rat, können Sie bitte ein Beispiel für diese Arbeit bitte, da dies helfen würde, es zu verstehen. Vielen Dank. – deucalion0