У меня есть код с количеством загружаемых файлов в папку, и я хочу, чтобы эти файлы указывали имя, размер и URL-адрес в базу данных, но мой контроллер не работает. (Im использует CakePHP framework). Я хочу добавить данные этих файлов, которые я загружаю в базу данных (все файлы), и я получил ошибку.
Ошибка:
Notice (8): Undefined index: tmp_namā€ā€‹ā€ā€‹e [APP\Controller\UploadFilesController.php, line 24]
Мой контроллер
public function uploadFile() { $filename = ''; if ($this->request->is('post')) { // checks for the post values $uploadData = $this->request->data; //print_r($this->request->data); die; foreach($uploadData as $file){ $filename = basename($file['name']); // gets the base name of the uploaded file $uploadFolder = WWW_ROOT. 'files'; // path where the uploaded file has to be saved $filename = $filename; // adding time stamp for the uploaded image for uniqueness $uploadPath = $uploadFolder . DS . $filename; if( !file_exists($uploadFolder) ){ mkdir($uploadFolder); // creates folder if not found } if (!move_uploaded_file($file['tmp_name'], $uploadPath)) { return false; } echo "Sa sisestasid faili: $filename<br>"; } foreach($this->request->data['UploadFile']['file_upload'] as $file){ if (!empty($this->request->data) && is_uploaded_file($this->request->data['UploadFile']['file_upload']['tmp_name'])) { //THIS IS LINE 24 $fileData = fread(fopen($this->request->data['UploadFile']['file_upload']['tmp_name'], "r"), $this->request->data['UploadFile']['file_upload']['size']); $this->request->data['UploadFile']['name'] = $this->request->data['UploadFile']['file_upload']['name']; $this->request->data['UploadFile']['size'] = $this->request->data['UploadFile']['file_upload']['size']; $this->request->data['UploadFile']['URL'] = $this->request->data['UploadFile']['file_upload']['tmp_name']; $this->request->data['UploadFile']['data'] = $fileData; $this->UploadFile->create(); $this->UploadFile->save($this->request->data); } } } } }
И вот мой файл вида:
<?php echo $this->Form->create('uploadFile', array( 'type' => 'file')); ?> <div class="input_fields_wrap"> <label for="uploadFilefiles"></label> <input type="file" name="data[]" id="uploadFilefiles"> </div> <button type="button" class="add_field_button">+</button> <br><br> <form name="frm1" method="post" onsubmit="return greeting()"> <input type="submit" value="Submit"> </form> <?php echo $this->Html->script('addFile');
Если это необходимо, я могу добавить скрипт AddFile
.
Вот моя таблица ( upload_files ):
Я думаю, это лучший способ сделать это:
public function uploadFile() { $filename = ''; if ($this->request->is('post')) { // checks for the post values $uploadData = $this->request->data ['UploadFile']['file_upload']; //print_r($this->request->data); die; foreach($uploadData as $file){ $filename = basename($file['name']); // gets the base name of the uploaded file $uploadFolder = WWW_ROOT. 'files'; // path where the uploaded file has to be saved $filename = $filename; // adding time stamp for the uploaded image for uniqueness $uploadPath = $uploadFolder . DS . $filename; if( !file_exists($uploadFolder) ){ mkdir($uploadFolder); // creates folder if not found } if (!move_uploaded_file($file['tmp_name'], $uploadPath)) { return false; } echo "Sa sisestasid faili: $filename<br>"; $this->request->data['UploadFile']['name'] = $file['name']; $this->request->data['UploadFile']['size'] = $file['size']; $this->request->data['UploadFile']['URL'] = $file['tmp_name']; $this->UploadFile->create(); $this->UploadFile->save($this->request->data); } } }
Я попробовал это на своем хосте и его работе.
Вы меняете свое мнение:
<input type="file" name="data[UploadFile][file_upload][]" class="form-control" multiple="multiple" id="AuthorAuthorImage">
И контроллер, который вы получаете
$this->request->data['UploadFile']['file_upload']
Эти данные представляют собой массив с форматом:
array ( [0] => Array ( [name] => 0.jpg [type] => image/jpeg [tmp_name] => D:\xampp\tmp\php5896.tmp [error] => 0 [size] => 55125 ) [1] => Array ( [name] => 1.jpg [type] => image/jpeg [tmp_name] => D:\xampp\tmp\php5897.tmp [error] => 0 [size] => 49613 ) [2] => Array ( [name] => 1-16.png [type] => image/png [tmp_name] => D:\xampp\tmp\php58A7.tmp [error] => 0 [size] => 1545337 ) )
Удачи!
Как сказал tungbk29, $ this-> request-> data ['UploadFile'] ['file_upload'] – это массив, поэтому вы должны изменить код foreach, как это
if (!empty($this->request->data['UploadFile']['file_upload'])) { foreach($this->request->data['UploadFile']['file_upload'] as $file){ if (is_uploaded_file($file['tmp_name'])) { $fileData = fread(fopen($file['tmp_name'], "r"), $file['size']); $this->request->data['UploadFile']['name'] = $file['name']; $this->request->data['UploadFile']['size'] = $file['size']; $this->request->data['UploadFile']['URL'] = $file['tmp_name']; $this->request->data['UploadFile']['data'] = $fileData; $this->UploadFile->create(); $this->UploadFile->save($this->request->data); } } }
Надеюсь, что это поможет снова!