2010-08-28 20 views
4

$ result = validateUploadedFile($ _ FILES);這是有條件的檢查過度殺傷力?

if (!empty($result) && !empty($result['valid']) && $result['valid']) 
{ 
    // do sth 
    // I don't know why sometime this three checks will cause me problems 
    // In other words, even if $result['valid'] is TRUE, this scope will not be hit 
} 

函數validateUploadedFile返回一個數組作爲$ result ['valid'] == TRUE,如果它通過。

下面是問題,if語句是否檢查太多? 我可以簡單地檢查以下內容嗎?我沒有幾個PHP語言知識,不知道這些檢查是否有必要。

if ($result['valid']) 
{ 
    // do sth 
} 

謝謝

function validateUploadedFile($uploadedFile) 
{ 
    // Define file size limit 
    $result = array('valid' => FALSE, 'error_message' => null, 'error_code' => null); 

    if (sth_wrong) 
    { 
     $result['error_message'] = 'sth_wrong'; 
     return $result;  
    } 

    if (sth_wrong2) 
    { 
     $result['error_message'] = 'sth_wrong2'; 
     return $result;  
    }  

    $result['valid'] = TRUE; 
    return $result; 
} 
+0

validateUploadedFile是什麼樣的?它會一直有效嗎?如果你正在完成這個功能,那麼你就會對結果不那麼小心。 – 2010-08-28 22:43:33

+0

你好保羅, 我已更新我的文章。 謝謝 – q0987 2010-08-29 00:57:26

回答

10

這取決於在上傳的文件無效的情況下函數返回的內容。這應該在多數情況下可能就足夠了,但:

if (!empty($result['valid'])) 

由於:

  • FALSEempty
  • NULL(或解封數組索引)是empty
  • 它不會抱怨,甚至如果$result是空陣列

你也可以只做到

if (!$result['valid']) 

,但是這會給你E_NOTICE如果該元素沒有設置。

+0

這是正確的。檢查$ result是否有值,也可以是數組,然後檢查數組的鍵是否有值。 – Inigoesdr 2010-08-29 00:29:17

+0

你好拉蒙, 我剛剛發現在某些情況下,我只是不能得到預期的結果,如果我檢查連續三個條件。 看來,空對我來說是最好的。 有沒有!空給我一個E_NOTICE? 謝謝 – q0987 2010-08-29 01:01:32

+0

不,它沒有。即使'$ result'完全未定義,這也是值得注意的事情,因爲有可能忘記'empty($ reslut ['valid'])''這樣的錯誤信息。 – Ramon 2010-08-29 08:59:20

4

我想

if (isset($result['valid']) && $result['valid']) 

會工作得很好。

+0

你好Zahymaka, 我讀的地方表明!empty比isset更好。 謝謝 – q0987 2010-08-29 00:59:00

+0

!只要'有效'索引被設置,空應該不會拋出E_NOTICE錯誤。 – Zahymaka 2010-08-29 01:31:10

+0

我認爲'empty'就像'isset',因爲它不需要參數存在,所以即使沒有設置「有效」索引,也不會出現「E_NOTICE」錯誤。 – Ramon 2010-08-29 10:35:02

1

您可以測試它。在這個特殊情況下,似乎你並不完全確定要檢查哪些值。在大多數情況下,根據邏輯,只需執行!$ result ['valid']/should/work - 但假設PHP將null/unset值視爲'false'。

製作一個快速腳本,分別測試所有條件。

  • 當$ result爲空時調用empty($ result ['valid'])會發生什麼?
  • 調用時會發生什麼!$ result ['valid']未定義時的結果$ result ['valid']?

繼續。寫一個腳本。測試它,並知道。

+0

你好,克蘇魯, 我發現了一些問題,我不能在卷中進行3次檢查。對於一些結果我會遇到一些問題。 謝謝 – q0987 2010-08-29 01:00:05

2

您的方法更多的是您應該使用原始用戶輸入進行的操作。但是,由於你正在處理一個函數,因此它可以輕鬆地完成繁重的工作。

只要確保它始終設置'valid'鍵;您的代碼將更具可讀性和安全性。如果你這樣做,if($result['valid'])就足夠了。

+0

根據更新,在這種情況下,「valid」鍵總是被設置,所以'if($ result ['valid'])'確實就足夠了。 – 2010-08-29 01:03:06

相關問題