2014-10-07 60 views
0

我创建了一个在线应用程序,只要有人上传了简历,该应用程序就能正常工作。如果简历是可选的,我们现在有可用职位,但是如果没有任何文件,则系统会报错。ColdFusion cffile upload - 可选

我试过IsDefined和StructKeyExists,无法让它工作。任何建议,不胜感激...

<cfset destination = expandPath("./uploads")> 
<cfif IsDefined('form.submitapp')> 
     <cfif IsDefined("form.uploadfile")> 
      <cffile action="upload" filefield="uploadfile" destination="#destination#" nameConflict="makeUnique"> 
      <cfif isDefined("CFFILE.serverFile")> 
      <cfset form.resume = CFFILE.serverFile> 
      </cfif> 
     </cfif> 

    <cfinsert tablename=... 
+4

分享你的表格代码。始终分享您的表单代码。你有一个cfparam for form.submitapp和form.uploadfile吗?如果是这样,那可能是你的问题。 – 2014-10-07 20:27:40

+0

另外,请记住“空”是一个不同于“未定义”的概念。大多数(不是全部)表单字段将被提交,无论它们是否包含值。这意味着他们*将*在操作页面上定义。他们将只有一个空字符串的值,即“”。像'structKeyExists'这样的函数不检查字段*值*。他们检查一个字段是否被定义。因此,请确保您使用正确的比较作业。 – Leigh 2014-10-07 21:40:38

+2

您使用cfinsert而不是cfquery的事实会降低处理可选表单字段等事务的灵活性。 – 2014-10-08 00:26:28

回答

0

由于括号说 - 你可能有一个默认的地方。试试这个:

<cfset destination = expandPath("./uploads")> 
<cfif IsDefined('form.submitapp')> 
    <cfif IsDefined("form.uploadfile") AND len(trim(form.uploadFile))> 
    <cffile action="upload" filefield="uploadfile" destination="#destination#" nameConflict="makeUnique"> 
    <cfif isDefined("CFFILE.serverFile")> 
     <cfset form.resume = CFFILE.serverFile> 
    </cfif> 
    </cfif> 
</cfif> 
+1

很难说没有看到实际的表单和错误信息(提示,提示;-),但即使没有'cfparam'也可能发生错误。文件字段仍将被定义,即使它留空。这会在他们调用'cffile action =“upload”'时导致错误。上面的'len(trim(..))'检查应该可以避免这个问题。 @BigMike - 不需要'isDefined(“CFFILE.serverFile”)'。这是一个总是在成功上传后定义的系统变量。 – Leigh 2014-10-07 21:51:43

+0

好点Leigh。 – 2014-10-08 13:51:03