0

私はこの追加ユーザー フォームを持っています。また、データをクエリして value="#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>

フロン

引数:

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

1 に答える 1

2

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

それは実際にあなたが望むことの逆をしている。私はあなたが言おうとしていることは次のとおりだと信じています:

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

編集 余談ですが、..引数はすべてオプションであるため、コードは少しぎこちなく感じます。

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

ファイルコントロールの「値」(ブラウザのセキュリティ制限)を実際に事前設定することはできません。どちらの場合もユーザーはファイルをアップロードできるため、前の画像が存在する場合にのみ、入力を入力して「表示」リンクを表示するだけです。

<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)#'、

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>

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

クエリ

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

そして、クリーンアップを忘れないでください。古いファイルを削除します...

于 2011-01-06T22:28:15.837 に答える