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;
}
}
答案 0 :(得分:1)
isValidated()
始终返回评估为true
的值(即不是具有true
值的纯布尔值,但评估为true
不过)。那是因为它返回TRUE
或(可能)非空字符串数组。
你有两个选择:
在isValidated()
案例中false
返回else
或者将您的if
更改为if($Uploads->isValidated()===TRUE)
(注意三重=
)。这不仅会检查值,还会检查{em> isValidated()
返回的值的类型。换句话说,只有当返回值一个值为true
的布尔值而不仅仅是任何值为true
的值时,它才会成功。