Múltiplo método de upload de arquivos no PHP OOP

Estou tentando construir um método em PHP para carregar vários arquivos e inserir os nomes de arquivos em um banco de dados MySQL .

Estou tentando construir isso com base em PHP OOP .

Múltiplos problemas com os quais enfrento e estudei com mais de 2 semanas.

Primeiro: o método só está inserindo 1 linha no database, mesmo que eu selecionei vários arquivos no formulário.

Segundo: o método não está recebendo o nome dos arquivos, portanto, mesmo que ele insira apenas 1 linha, ele insere uma linha vazia.

Aqui está a class de imagens :

 "There is no error.", UPLOAD_ERR_INI_SIZE => "The file size exceeds the upload_max_filesize", UPLOAD_ERR_FORM_SIZE => "The file upload exceeds the MAX_FILE_SIZE", UPLOAD_ERR_PARTIAL => "The uploaded file was only partially uploaded", UPLOAD_ERR_NO_TMP_DIR => "Missing a temporary folder", UPLOAD_ERR_CANT_WRITE => "Failed to write file on desk", UPLOAD_ERR_EXTENSION => "A PHP extension stopped the file upload" ); public function image_path(){ return $this->upload_dir.DS.$this->image_url; } public function set_files($file){ if(empty($file) || !$file || !is_array($file)){ $this->errors[] = "There was no file uploaded here"; return false; }else{ $this->image_url = $file['name']; $this->tmp_path = $file['tmp_name']; } } public function new_images(){ foreach ($_FILES['images'] as $file) { $this->set_files($file); $this->property_id = "1"; $this->date = date('Ymd H:i:s'); $target_path = $this->upload_dir . DS . $this->image_url; move_uploaded_file($this->tmp_path, $target_path); if($this->create()){ print_r($file); var_dump($file); return true; } } } } ?> 

print_r está mostrando o seguinte:

 Array ( [0] => download (1).jpg [1] => download (2).jpg [2] => download (3).jpg [3] => download.jpg ) 

e var_dump está mostrando o seguinte:

 array(4) { [0]=> string(16) "download (1).jpg" [1]=> string(16) "download (2).jpg" [2]=> string(16) "download (3).jpg" [3]=> string(12) "download.jpg" } 

Mais detalhes:

Aqui está a class principal da qual a class de imagens se estende:

 query($sql); $object_array = array(); while($rows = mysqli_fetch_array($set_result)){ $object_array[] = static::instantiation($rows); } return $object_array; } public static function instantiation($records){ $calling_class = get_called_class(); $object = new $calling_class; foreach ($records as $attribute => $value) { if($object->has_attribute($attribute)){ $object->$attribute = $value; } } return $object; } private function has_attribute($attribute){ $object_properties = get_object_vars($this); return array_key_exists($attribute, $object_properties); } protected function properties(){ $properties = array(); foreach (static::$table_fields as $field){ if(property_exists($this, $field)){ $properties[$field] = $this->$field; } } return $properties; } protected function clean_properties(){ global $database; $clean_properties = array(); foreach ($this->properties() as $key => $value) { $clean_properties[$key] = $database->escape_string($value); } return $clean_properties; } public function create(){ global $database; $properties = $this->clean_properties(); $sql = "INSERT INTO ".static::$db_table."(". implode(",", array_keys($properties)).")"; $sql .= "VALUES ('". implode("','", array_values($properties)) ."')"; if($database->query($sql)){ $this->id = $database->last_id(); print_r($sql); var_dump($sql); return true; }else{ return false; } } } ?> 

print_r está mostrando o seguinte resultado:

 INSERT INTO images(id,image_url,property_id,date)VALUES ('','','1','2017-10-20 20:24:05') 

var_dump está mostrando o follwoing:

 string(89) "INSERT INTO images(id,image_url,property_id,date)VALUES ('','','1','2017-10-20 20:24:05')" 

Além disso, aqui está a página HTML :

  is_signed_in()) {redirect("../index");} ?> new_images(); } ?> 

Seu loop com $_FILES['images'] está errado. Cada elemento desta não é todas as propriedades de um único arquivo. Cada elemento é uma propriedade diferente, que contém uma matriz dessas propriedades de todos os uploads. Eg $_FILES['images']['name'] é uma matriz de todos os nomes. Então, você precisa percorrer uma dessas propriedades e, em seguida, obter os elementos correspondentes das outras propriedades.

 foreach ($_FILES['images']['name'] as $index => $name) { $file = array('name' => $name, 'tmp_name' => $_FILES['images']['tmp_name'][$index]); $this->set_files($file); ... }