2011-01-06 3 views
0

Ich habe dieses Benutzerformular hinzufügen, es dient auch als Benutzer bearbeiten Formular durch Abfragen der Daten und setzen Sie den Wert = "# query.xvalue #". Wenn der Benutzer vorhanden ist (z. B. wenn Sie einen Benutzer bearbeiten, lädt er die Benutzerdaten aus der Datenbank. Wenn das Feld <cffile geladen wird, werden die Daten nicht geladen. Wenn der Einfügevorgang zum Einfügen von Daten ausgeführt wird, werden die Daten überschrieben Datenbankwerte mit einem leeren String (Wenn ein Benutzer nicht eine neue Datei) Wie kann ich das vermeidenCFfile - Wert ist nicht auf die abgefragten Daten gesetzt

Code:.?

Form:

<br/>Digital Copy<br/> 
<!--- If null, set a default if not, set the default to database default ---> 
<cfif len(Trim(certificationsList.cprAdultImage)) EQ 0> 
<cfinput type="file" required="no" name="cprAdultImage" value="" > 
<cfelse> 
    File Exists: <cfoutput><a href="#certificationsList.cprAdultImage#">View File</a></cfoutput> 
    <cfinput type="file" required="no" name="cprAdultImage" value="#certificationsList.cprAdultImage#"> 
</cfif>   

Formular Prozessor:

<!--- Has a file been specificed? ---> 
<cfif not len(Trim(form.cprAdultImage)) EQ 0> 
    <cffile action="upload" filefield="cprAdultImage" destination="#destination#" nameConflict="makeUnique"> 
    <cfinvokeargument name="cprAdultImage" value="#pathOfFile##cffile.serverFile#"> 
<cfelse> 
    <cfinvokeargument name="cprAdultImage" value=""> 
</cfif> 

CFC

ARGS:

<cfargument name="cprAdultExp" required="NO"> 
<cfargument name="cprAdultCompany" type="string" required="no"> 
<cfargument name="cprAdultImage" type="string" required="no"> 
<cfargument name="cprAdultOnFile" type="boolean" required="no"> 

Abfrage:

UPDATE mod_StudentCertifications 
SET 
cprAdultExp='#DateFormat(ARGUMENTS.cprAdultExp, "mm/dd/yyyy")#', 
cprAdultCompany='#Trim(ARGUMENTS.cprAdultCompany)#', 
cprAdultImage='#Trim(ARGUMENTS.cprAdultImage)#', 
cprAdultOnFile='#Trim(ARGUMENTS.cprAdultOnFile)#' 

INSERT INTO 
mod_StudentCertifications(
cprAdultExp, 
cprAdultcompany, 
cprAdultImage, 
cprAdultOnFile 

Antwort

2

< cfif nicht len (Trim (form.cprAdultImage)) EQ 0>

That macht tatsächlich das Gegenteil von dem, was Sie wollen. Ich glaube, was Sie versuchen, zu sagen:

<!--- if the length is greater than 0, assume a file was uploaded ---> 
<cfif len(Trim(form.cprAdultImage)) GT 0> 
    file is not empty. do the upload ... 
    <cfinvokeargument name="cprAdultImage" value="#pathOfFile##cffile.serverFile#"> 
<cfelse> 
    <cfinvokeargument name="cprAdultImage" value=""> 
</cfif> 

bearbeiten Als Neben .. da alle Ihre Argumente sind optional, fühlt sich der Code ein wenig umständlich.

< cfinput type = "file" required = "no" name = "cprAdultImage" value = "# certificationsList.cprAdultImage #">,

Man kann nicht wirklich die Datei control "Wert" voreingestellt (Sicherheitsbeschränkungen für Browser) Da ein Benutzer in beiden Fällen eine Datei hochladen kann, geben Sie nur eine Eingabe an und zeigen Sie den Link "Ansicht" nur an, wenn ein vorheriges Bild vorhanden ist.

<cfif len(Trim(certificationsList.cprAdultImage))> 
    File Exists: 
    <cfoutput><a href="#certificationsList.cprAdultImage#">View File</a></cfoutput> 
</cfif>   
<cfinput type="file" required="no" name="cprAdultImage"> 

cprAdultImage = '# Trim (ARGUMENTS.cprAdultImage) #',

Die Update-Logik sieht ein bisschen wie gut. Wenn eine Datei nicht angegeben wurde, überschreiben Sie das vorhandene Bild mit einer leeren Zeichenfolge.Um zu vermeiden, dass, nur aktualisiert das Feld wenn eine neue Datei geliefert wurde (dh nicht leer)

Formularverarbeitung:

<cfif len(Trim(form.cprAdultImage)) GT 0> 
    <cffile action="upload" filefield="cprAdultImage" destination="#destination#" nameConflict="makeUnique"> 
    <cfinvokeargument name="cprAdultImage" value="#pathOfFile##cffile.serverFile#"> 
</cfif> 

CFC ARGS:

<!--- if values are always used in queries, should be required=true ---> 
<cfargument name="cprAdultExp" required="yes"> 
<cfargument name="cprAdultCompany" type="string" required="yes"> 
<cfargument name="cprAdultOnFile" type="boolean" required="yes"> 
<cfargument name="cprAdultImage" type="string" default=""> 

Abfrage

UPDATE mod_StudentCertifications 
SET 
cprAdultExp='#DateFormat(ARGUMENTS.cprAdultExp, "mm/dd/yyyy")#', 
cprAdultCompany='#Trim(ARGUMENTS.cprAdultCompany)#', 
<!--- only overwrite the value if a new file was supplied ---> 
<cfif len(trim(ARGUMENTS.cprAdultImage))> 
    cprAdultImage='#Trim(ARGUMENTS.cprAdultImage)#', 
</cfif> 
cprAdultOnFile='#Trim(ARGUMENTS.cprAdultOnFile)#' 
WHERE .... 

Und vergessen Sie nicht zu säubern. Entfernen Sie alle alten Dateien ...

+0

Ich hatte Angst davor. was soll ich in den else hineinlegen? –

+0

Der Code wäre genau der gleiche, nur den CFIF beheben. Ich habe meine Antwort aktualisiert, um es klarer zu machen. Obwohl das Übergeben einer leeren Zeichenfolge etwas merkwürdig erscheint, ist Ihr cfargument optional. – Leigh

+0

Vielen Dank. Gibt es eine bessere Möglichkeit, das Update durchzuführen? –