簡體   English   中英

如果/其他不正常

[英]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中,因此上載類沒有太大幫助。

您想要AND而不是OR

如果文件是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM