2012-12-20 32 views
0

我使用這個條件,但它不工作,因爲它總是假的,即沒有文件類型滿足條件,所以我fighre必須有語法錯誤,但我不能想辦法。當在php中上傳文件時創建文件類型條件

if (!($_FILES["uploaded"]["type"] == "video/mp4") 
&& (!$_FILES["uploaded"]["type"] == "video/flv") 
&& (!$_FILES["uploaded"]["type"] == "video/webm") 
&& (!$_FILES["uploaded"]["type"] == "video/ogg")) 

{ 
    $message="not an accepted file format"; 
}  

回答

5

in_array常見的情況:

$type   = $_FILES["uploaded"]["type"]; 
$allowedTypes = ["video/mp4", "video/flv", "video/webm", "video/ogg"]; 
$isRefusedType = !in_array($type, $allowedTypes); 
if ($isRefusedType) { 
    $message = "not an accepted file format"; 
} 

或者isset針對flipped array

$type   = $_FILES["uploaded"]["type"]; 
$allowedTypes = array_flip(["video/mp4", "video/flv", "video/webm", "video/ogg"]); 
$isRefusedType = !isset($allowedTypes[$type]); 
if ($isRefusedType) { 
    $message = "not an accepted file format"; 
} 
+0

是的,我一定會自己去'in_array'。 – jeroen

+0

任何不使用'switch',呃? ;)這裏的值是不允許的類型可以從配置中加載。 – Dan

+0

在這種情況下,兩者都非常相似。我首先傾向於寫一個'in_array'的例子,但是也發現了值得展示的數組鍵值。 'in_array'例子存在,但是還找不到它。 - 好吧,補充,也看到這是錯誤的邏輯,不拒絕類型,但允許的。 – hakre

5
if (!($_FILES["uploaded"]["type"] == "video/mp4" 
     || $_FILES["uploaded"]["type"] == "video/flv" 
     || $_FILES["uploaded"]["type"] == "video/webm" 
     || $_FILES["uploaded"]["type"] == "video/ogg")) 
{ 
    $message="not an accepted file format"; 
} 

我認爲有效的是指任何這些類型的,所以你檢查任何這些(使用or),比否定它。

+1

打字這件事,當你發佈+1 –

+0

應該不是''字符!在括號外? – cheesemacfly

+0

不,因爲如果它不是mp4,但它是flv然後消息會出現 – user1559811

2

時間越長越好,但在我看來更具可讀性。

switch ($_FILES["uploaded"]["type"]) { 
    case "video/webm": 
    case "video/mp4": 
    case "video/flv": 
    case "video/ogg": 
     $message = "Okie dokie"; 
     break; 
    default: 
     $message = "Invalid format"; 
}