2014-10-07 62 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