2012-12-24 134 views
-1

不太確定是怎麼回事。 OK所以基本上這個腳本是在「如果」功能和當前圖像擴展到文件多數民衆贊成在被加載到頁面,這樣php奇文件擴展名錯誤

if ($row['file_type'] == 'jpg' && 'jpeg' && 'png' && 'gif') { 

    $img = "obj.php?id=".base64_encode($row['file_path'])."&mode;thumb"; 

} else { 

    $img = "assets/filesystem/file_extension_".$row['file_type'].".png"; 

} 

進行比較。如果我取代「& &」有「或」它的工作原理,對JPG,PNG,JPEG和GIF,但在else語句中失敗,並且不會爲所有其他文件類型運行,所以docx將不會通過file_extension_docx.png返回

有關爲什麼會發生這種情況的任何線索?因爲如果我將它保留在「& &」,則運行$ img並不會產生任何問題,並且會返回所有JPEG/JPG文件的縮略圖,但不會返回PNG和GIF,它們是從資產返回的file_extension_png.png或file_extension_gif.png,而不是作爲圖像返回通過obj.php文件

回答

4

的問題是,$row['file_type'] == 'jpg' && 'jpeg' && 'png' && 'gif'評估爲類似...

$row['file_type'] contains 'jpg' 
AND 'jpeg' is a non empty string 
AND 'png' is a non empty string 
AND 'gif' is a non empty string 

你實際上是不檢查,對每個串的變量的值。

如果你想檢查是否$row['file_type']包含這些值之一......你可以只使用例如in_array()功能:

if (in_array($row['file_type'], array('jpeg', 'jpg', 'png', 'gif'))) { 
    // ... 
} else { 
    // ... 
} 

或者你可以做到這一點明確

if ($row['file_type'] == 'jpg' || $row['file_type'] == 'jpeg' || $row['file_type'] == 'png' || $row['file_type'] == 'gif') { 
    // ... 
} else { 
    // ... 
} 

我希望這有幫助。

+0

這個選項更加靈活imo –

2
if ($row['file_type'] == 'jpg' && 'jpeg' && 'png' && 'gif') 

縮略圖通過

if ($row['file_type'] == 'jpg' || $row['file_type'] == 'jpeg' || $row['file_type'] == 'png' || $row['file_type'] == 'gif') 
+0

而且工作得很好。 –

2

更換隻是一個建議,你也可以使用開關的情況下爲,容易得多。

switch($row['file_type']){ 

case 'jpg': 
case 'jpeg': 
case 'png': 
case 'gif': 
// put your if codes here 

break; 

// put your else code under default 
default: 

break; 

} 
+0

True也可以嘗試,但它會佔用更多的空間並且執行相同的操作,因爲我的代碼已經按照較少的行數進行了調整 –

+0

但是更容易閱讀,而不是if內的long語句。 – Codethusiast

+0

我同意你的意見 –