2013-09-24 2 views
0

Я пытаюсь сделать некоторые проверки на загруженные изображения. Когда я проверяю, были ли выбраны и загружены ли какие-либо изображения, он должен вернуть сообщение об ошибке, если изображения не были загружены. Но в моем методе он всегда возвращает false.Как проверить загруженный файл пуст?

Heres метод:

class event{ 

     private $dbh; 
     private $post_data; 


     public function __construct($post_data, PDO $dbh){ 
       $this->dbh = $dbh; 
       $this->post_data = array_map('trim', $post_data); 

     } 

public function checkValidImages(){ 
      $errors = array(); 

      if(empty($this->post_data['event-images'])){ 
       $errors[] = 'Please select at least one image to upload.'; 
      } 

      if(count($errors) > 0){ 
       return $errors; 
      }else{ 
       return FALSE; 
      } 

     } 

и назвав его здесь:

// Check all images are valid 
     $images = new event($_FILES, $dbh); 
     var_dump($imageErrors = $images->checkValidImages()); 

В var_dump() возвращается bool(false).

Heres форма:

<form name="submit-event" action="submit-event.php" method="post" enctype="multipart/form-data"> 
<div class="large-12 columns no-padding"> 
<p>Select images for this event</p><br /> 
<input type="file" class="right" name="event-images[]" size="50" multiple="multiple" /> 
</div> 
</form> 

Так почему же мой метод, возвращающий ложь, даже если я не выбрать любые изображения.

+0

var_dump() возвращает bool (false), что означает, что ошибки нет. Вот как вы определили свою функцию. – Maximus2012

+0

Я только что понял, что если я не выберу изображение для загрузки и сделаю счет '$ _FILES ['event-images'] ['name']', он вернет '1' вместо 0. Что нечетно , Конечно, если я ничего не выбрал, он должен был бы вернуть нуль? – crm

+0

Я бы так подумал. – Maximus2012

ответ

0

Когда вход в файл HTML оставлен пустым, браузер все равно отправит имя элемента формы, поэтому вы все равно получите эту запись в массиве $ _FILES, но с кодом ошибки UPLOAD_ERR_NO_FILE и именем файла "" ,

В любом случае вы должны проверить the error code, так как многие вещи могут пойти не так. Таким образом, ваш код проверки выглядит примерно так:

$numOkayFiles = 0; 
$numIntendedFiles = 0; 
foreach ($_FILES['event-images']['error'] as $errorCode) { 
    $numIntendedFiles += ($errorCode != UPLOAD_ERR_NO_FILE); 
    switch ($errorCode) { 
    case UPLOAD_ERR_OK: 
     $numOkayFiles++; 
     break; 
    case UPLOAD_ERR_INI_SIZE: 
    case UPLOAD_ERR_FORM_SIZE: 
     $errors[] = 'Your file was bigger than the maximum allowed size.'; 
     break; 
    case UPLOAD_ERR_NO_FILE: 
     // ignore 
     break; 
    default: 
     $errors[] = 'A problem occured during file upload.'; 
    } 
} 
if ($numIntendedFiles == 0) { 
    $errors[] = 'Please select at least one image to upload.'; 
} 
Смежные вопросы