[英]If/else isn't working properly
我在Codeigniter內部使用了一個驗證功能。
function valid_image() {
if ( ($_FILES["file"]["type"] != "image/jpeg") || ($_FILES["file"]["type"] != "image/gif") ) {
$this->form_validation->set_message('valid_image', 'Wrong file type..');
return false;
} else {
return true;
}
在if語句中僅使用“ image / jpeg”部分,即可正常工作。 如果我嘗試上傳除jpg文件以外的任何內容,它將失敗。 如果我運行上面的代碼,則無法同時顯示jpg或gif文件。
在有人說“為什么不使用上載類”之前,我不能。 我將照片直接保存到MongoDB中,因此上載類沒有太大幫助。
如果文件是jpg,則不是gif,您會收到消息。
如果文件是gif,則不是jpg,您仍然會收到消息。
您具有“文件不是jpg或文件不是gif”。 替換|| 使用&&,只有在“文件不是jpg和文件不是gif”時,您才會收到消息。
您的if陳述有誤。 您應該使用“ &&”而不是“ ||” (德摩根定律)。
你需要你的條件
if ( ( $_FILES["file"]["type"] != "image/jpeg")
&& ($_FILES["file"]["type"] != "image/gif") ) {...}
如果不是jpeg而不是gif-則無效
您需要AND而不是OR
if (($_FILES["file"]["type"] != "image/jpeg") &&
($_FILES["file"]["type"] != "image/gif"))
這並不能真正回答您的問題,但是...
$_FILE[blah]["type"]
參數是由網絡瀏覽器設置的,因此是無法信任的用戶數據。
您可能要使用exif_imagetype($_FILES["file"]["tmp_name"])
來檢測真實的圖像類型。
function valid_image() {
$type = exif_imagetype($_FILES["file"]["tmp_name"]);
if (($type != IMAGETYPE_GIF) && ($type != IMAGETYPE_JPEG)) {
$this->form_validation->set_message('valid_image', 'Wrong file type..');
return false;
} else {
return true;
}
}
編輯:如果未安裝exif擴展名,則也可以執行以下操作:
$sizes = getimagesize($_FILES["file"]["tmp_name"]);
$sizes[2]
將包含與IMAGETYPE常量之一相對應的值。
function valid_image() {
$sizes = getimagesize($_FILES["file"]["tmp_name"]);
if (($sizes[2] != IMAGETYPE_GIF) && ($sizes[2] != IMAGETYPE_JPEG)) {
$this->form_validation->set_message('valid_image', 'Wrong file type..');
return false;
} else {
return true;
}
}
使用&&代替||
您所擁有的陳述保證它不是jpeg也不是gif。 這樣做的問題是,如果它是jpeg,它仍然不是gif,因此它返回false。 實際上,它總是返回false,因為某事物不能同時是兩件事。
更改|| 如果這是您的意圖,那么&&應該會有所幫助。
您要使用and,而不是or。 在上面的代碼中,jpg失敗是因為它不是gif,而gif失敗是因為它不是jpg。
function valid_image() {
if ( ($_FILES["file"]["type"] != "image/jpeg") && ($_FILES["file"]["type"] != "image/gif") ) {
$this->form_validation->set_message('valid_image', 'Wrong file type..');
return false;
} else {
return true;
}
好吧,如果您使用.gif嘗試該語句,那會說它是錯誤的文件,因為它首先檢查第一個“或”。 另外,如果您嘗試運行.jpg文件,它將首先傳遞.jpg,但第二次傳遞失敗,因此仍然會表示無效。 嘗試將其設置為“ &&”而不是“ ||”,這樣它將每次檢查並確保它是兩者之一。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.