2013-10-27 3 views
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()); 
    } 
} 
?> 

Я поставил, если statetment перед $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

'$ Uploads-> isValidated() === – raina77ow

+4

' TRUE, если ($ this-> containsError() 'должен быть' если ($ this-> containsError() '- Это только делает более sense – Masadow

+0

Невозможно увидеть, что содержитError, но похоже, что вы говорите «если есть ошибка, и все остальное в порядке) ... Как могут быть ошибки и все нормально? Что эта функция проверяет и возвращает? – Gavin

ответ

1

isValidated() всегда возвращает значение, которое оценивает в true (т.е. не чисто логическое значение со значением true, но оценивается в true, тем не менее). Это потому, что он либо возвращает TRUE, либо (предположительно) непустой массив строк.

У вас есть два варианта здесь:

  1. Либо сделать isValidated() возврат товара false в else случае

  2. или изменить if к if($Uploads->isValidated()===TRUE) (обратите внимание на тройной =). Это проверит не только значение, но и тип значения, возвращенный isValidated(). Другими словами, он будет успешным только в том случае, если возвращаемое значение равно a boolean со значением true, а не только любое значение, которое равно true.

+0

Я пробовал это раньше .. позвольте мне сделать еще раз, так как я внес некоторые изменения в класс тоже. –

+0

@geogmagas благодарен за проделанную работу, но здесь возникла еще одна проблема .. I print_r (сообщения) и его показ Array ([0] => Извините, Этот файл содержит ошибку [1] => Извините, Этот файл содержит ошибку) Почему он показывает это 2 раза? –

+1

Потому что вы дважды вызываете '$ Uploads-> isValidated()' дважды - один раз в состоянии и один раз в предложении 'else'. – geomagas

Смежные вопросы