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

1 回答 1

1

isValidated()总是返回一个计算结果为的值true即不是一个带有值的纯布尔true值,但true仍然计算为)。那是因为它要么返回要么返回TRUE(可能)非空字符串数组。

您在这里有两个选择:

  1. 在这种情况下要么isValidated()退货falseelse

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

于 2013-10-27T22:44:09.173 回答