每次都返回TRUE

时间:2013-10-27 22:24:35

标签: php

if(isset($_POST['submit'])&& isset($_FILES['file'])){
    $Uploads = new Uploads($_FILES);
    $Uploads->UploadLocation = "../images/categories/";
    if($Uploads->isValidated()== TRUE){
    $Image = array("image" => $Uploads->upload());
    $_POST = array_merge($_POST,$Image);
    unset($_POST['submit']);
    $Category = new Categories();
    $Category->insertCategory("users", $_POST);
    }
    else {
        print_r($Uploads->isValidated());   
    }
}
?>

我已将if语句置于$Uploads->isValidated()函数之前,因此其余代码只应在返回true时运行。以下是功能代码。

public function isValidated(){
        if($this->containsError() && $this->isValidFile() && $this->isValidSize()){
            return TRUE;
        }
        else
        {
            return $this->ValidationMessages;
        }
    }

我检查了所有三个方法是否都返回TRUE而不是我的isValidated()方法应该返回TRUE。 $this->ValidationMessages是一个消息数组,如果三个验证方法中的任何一个没有返回TRUE,则填充这些消息。

现在我故意不将任何文件传递给这个类来检查我是否收到错误消息,但它仍在运行其余的代码,似乎我的isValidated()方法返回TRUE,它不应该。

请注意我的3种验证方法是完美的,因为我已经检查了所有这些,这就是为什么我不在这里发布它们。但如果你需要我可以发布代码。

我需要帮助弄清楚为什么我没有收到验证信息。

更新部分:

private function containsError(){
        //checking if file contains any error
        if(!empty($this->FileError)){
            $this->ValidationMessages[] = "Sorry, This file contains error";
        }
        else {
            return TRUE;
        }     
    }

   private function isValidFile() {
        // putting the allowed files in array
        $AllowedExt = array('jpg', 'jpeg', 'gif', 'png');
        // matching with allowed file types
        if (in_array($this->FileExt, $AllowedExt)) {
            return TRUE;
        } else {
            $this->ValidationMessages[] = "This extension is not allowed";
            return FALSE;
        }
    }

private function isValidSize() {
    // setting the maximum size limit in bytes
    $AllowedSize = 1048576;
    // checking if the user file does not exceed the allowed size
    if (!$this->FileSize < $AllowedSize) {
        return TRUE;
    } else {
        $this->ValidationMessages[] = "File should not be greater than 1MB";
        return FALSE;
    }
}

1 个答案:

答案 0 :(得分:1)

isValidated()始终返回评估为true 的值(即不是具有true值的纯布尔值,但评估为true不过)。那是因为它返回TRUE或(可能)非空字符串数组。

你有两个选择:

  1. isValidated()案例中false返回else

  2. 或者将您的if更改为if($Uploads->isValidated()===TRUE)(注意三重=)。这不仅会检查值,还会检查{em> isValidated()返回的值的类型。换句话说,只有当返回值一个值为true 的布尔值而不仅仅是任何值为true的值时,它才会成功。

    < / LI>