Php 每次都返回TRUE
我将if语句放在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
$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;
}
}