首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CFfile --未设置查询数据的值

CFfile --未设置查询数据的值
EN

Stack Overflow用户
提问于 2011-01-07 06:03:45
回答 1查看 355关注 0票数 0

我有这个add user表单,通过查询数据和设置value="#query.xvalue#“,它还兼具编辑用户表单的功能。如果用户存在(例如,您正在编辑用户,它将从数据库中加载用户数据。当在<cffile字段上执行此操作时,它不会加载数据,然后当insert转到插入数据时,它会使用空字符串覆盖数据库值(如果用户没有输入新文件)。我该如何避免这种情况?

代码:

表格:

代码语言:javascript
复制
<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>        

表单处理器:

代码语言:javascript
复制
<!--- 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

参数:

代码语言:javascript
复制
<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">   

查询:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-01-07 06:28:16

这实际上是在做你想要的相反的事情。我相信你想说的是:

代码语言:javascript
复制
<!--- 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>

编辑为旁注,..由于您的所有参数都是可选的,因此代码感觉有点笨拙。

您不能真正预设文件控制“值”(浏览器安全限制)。由于用户在这两种情况下都可以上传文件,因此只需提供输入并仅在先前图像存在的情况下显示"view“链接即可。

代码语言:javascript
复制
<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)#',

更新逻辑看起来也有点不对劲。如果未提供文件,则最终将使用空字符串覆盖现有图像。为了避免这种情况,仅当提供了新文件(即非空文件)时才更新该字段

表单处理:

代码语言:javascript
复制
<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参数:

代码语言:javascript
复制
<!--- 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="">

查询

代码语言:javascript
复制
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 ....

别忘了清理。删除所有旧文件...

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4620414

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档