如果/ else不能正常工作

时间:2010-03-18 18:13:05

标签: php codeigniter

我有一个验证功能,我在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中,因此上传类没有多大帮助。

9 个答案:

答案 0 :(得分:5)

你想要而不是OR

如果文件是jpg,那么它不是gif,你得到的信息 如果文件是gif,那么它不是jpg,你仍然会收到消息。

你有“文件不是jpg或文件不是gif”。替换||与&&只有当“文件不是jpg并且文件不是gif”时才会收到消息。

答案 1 :(得分:1)

你的if语句错了。你应该使用'&&'而不是'||' (德莫根定律)。

答案 2 :(得分:1)

你需要你的条件

if ( ( $_FILES["file"]["type"] != "image/jpeg") 
       && ($_FILES["file"]["type"] != "image/gif")  ) {...}

如果它不是jpeg而且它不是gif - 它无效

答案 3 :(得分:1)

您需要AND代替OR

 if (($_FILES["file"]["type"] != "image/jpeg") && 
     ($_FILES["file"]["type"] != "image/gif"))

答案 4 :(得分:1)

这并没有真正回答你的问题,但是......

$_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 constants之一相对应的值。

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;
    }
}

答案 5 :(得分:1)

使用&&而不是||

答案 6 :(得分:0)

你拥有它的声明保证它不是jpeg而不是gif。问题是如果它是jpeg,它仍然不是gif,所以它返回false。实际上,它总是返回false,因为某些东西不能同时出现两件事。

更改||和&&如果这是你的意图,它应该有所帮助。

答案 7 :(得分:0)

你想要使用和,而不是或。在上面的代码中,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;
}

答案 8 :(得分:0)

如果您使用.gif尝试该语句,它会说它是错误的文件,因为它会先检查第一个'或'。此外,如果您尝试运行.jpg,它将通过第一个,但然后失败第二个,因此它仍然会说它无效。尝试制作'&&'而不是'||',这样它会检查并确保它每次都是其中之一。