Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 每次都返回TRUE_Php - Fatal编程技术网

Php 每次都返回TRUE

Php 每次都返回TRUE,php,Php,我将if语句放在$Uploads->isValidated()函数之前,因此剩下的代码应该只在返回true后运行。下面是函数代码 if(isset($_POST['submit'])&& isset($_FILES['file'])){ $Uploads = new Uploads($_FILES); $Uploads->UploadLocation = "../images/categories/"; if($Uploads->isValid

我将if语句放在
$Uploads->isValidated()
函数之前,因此剩下的代码应该只在返回true后运行。下面是函数代码

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());   
    }
}
?>
我已经检查了这三个方法是否都返回TRUE,而我的
isValidated()
方法应该返回TRUE。
$this->ValidationMessages
是一个消息数组,如果三种验证方法中的任何一种都不返回TRUE,则将填充该数组

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

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

我需要帮助找出为什么我没有收到验证消息

更新部分:

public function isValidated(){
        if($this->containsError() && $this->isValidFile() && $this->isValidSize()){
            return TRUE;
        }
        else
        {
            return $this->ValidationMessages;
        }
    }
私有函数containsError(){
//检查文件是否包含任何错误
如果(!empty($this->FileError)){
$this->ValidationMessages[]=“对不起,此文件包含错误”;
}
否则{
返回TRUE;
}     
}
私有函数isValidFile(){
//将允许的文件放入数组
$AllowedExt=array('jpg','jpeg','gif','png');
//与允许的文件类型匹配
if(在数组中($this->FileExt,$AllowedExt)){
返回TRUE;
}否则{
$this->ValidationMessages[]=“不允许此扩展”;
返回FALSE;
}
}
私有函数isValidSize(){
//设置最大大小限制(以字节为单位)
$AllowedSize=1048576;
//检查用户文件是否未超过允许的大小
如果(!$this->FileSize<$AllowedSize){
返回TRUE;
}否则{
$this->ValidationMessages[]=“文件不应大于1MB”;
返回FALSE;
}
}
isValidated()
始终返回一个计算结果为
true
的值(即,不是带有
true
值的纯布尔值,但计算结果为
true
)。这是因为它要么返回
TRUE
,要么(大概)返回一个非空字符串数组

您有两种选择:

  • else
    案例中,使
    isValidated()
    返回
    false

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


  • $Uploads->isValidated()===TRUE
    如果(!$this->containsError()
    应该是
    如果(!$this->containsError()
    )-它只是更为合理,看不到containsError在做什么,但看起来像是在说“如果有错误,其他一切正常”)…怎么会有错误,一切正常?该函数检查并返回什么?等等,我正在更新我的方法here@Masadow我已经更新了我的方法,请看一看我之前已经尝试过。让我再做一次,因为我在类中也做了一些更改。@geogmagas感谢它工作正常,但这里还有一个问题。我打印(消息)它的显示数组([0]=>对不起,这个文件包含错误[1]=>对不起,这个文件包含错误)为什么要显示它两次?因为你调用了
    $Uploads->isValidated()
    两次——一次在条件中,一次在
    else
    子句中。在
    isValidated()
    中返回false更有意义
    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;
        }
    }