CFfile - значение не соответствует запрашиваемым данным - PullRequest
0 голосов
/ 07 января 2011

У меня есть эта форма добавления пользователя, она также удваивается как форма редактирования пользователя, запрашивая данные и устанавливая значение = "# query.xvalue #". Если пользователь существует (например, вы редактируете пользователя, он загружает данные пользователей из базы данных. При этом в поле <cffile он не загружает данные, а затем, когда вставка идет на вставку данных, заменяет значения базы данных пустой строкой (если пользователь не вводит новый файл). Как этого избежать?

код:

Форма:

<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>        

Обработчик форм:

<!--- 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">   

Запрос:

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

1 Ответ

2 голосов
/ 07 января 2011

Это на самом деле делает наоборот, что вы хотите. Я верю, что вы пытаетесь сказать:

<!--- 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>

Редактировать Кроме того, поскольку все ваши аргументы являются необязательными, код выглядит немного неловко.

,

Вы не можете реально установить «значение» элемента управления файлом (ограничения безопасности браузера). Поскольку пользователь может загрузить файл в обоих случаях, просто введите данные и отобразите ссылку «просмотр», только если существует предыдущее изображение.

<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 = '# Обрезка (ARGUMENTS.cprAdultImage) #',

Логика UPDATE также выглядит немного не так. Если файл не был предоставлен, вы в конечном итоге перезапишите существующее изображение пустой строкой. Чтобы избежать этого, обновляйте это поле , только если предоставлен новый файл (т. Е. Не пустой)

Обработка форм:

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

ХФУ АРГС:

<!--- 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="">

Запрос

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 ....

И не забудьте очистить. Удалить все старые файлы ...

...