I am trying to create a multiple file upload using cakephp 2. so please help. i new to cakephp as you can see my controller and view coding is wokking for single image.
public function admin_add() {
if ($this->request->is('post')) {
$this->Portfolio->create();
$error_message = $this->Portfolio->checkFileSize($this->request->data);
if ( $error_message === true ) {
$this->request->data['Portfolio'] = $this->Common->processMedia($this->request->data['Portfolio']);
//echo '<pre>'; print_r($this->request->data); echo '</pre>';
// exit();
if ($this->Portfolio->save($this->request->data)) {
$this->Session->setFlash(__('The portfolio has been saved'), 'flash_success');
$this->redirect(array('action' => 'index'));
} else {
$this->Session->setFlash(__('The portfolio could not be saved. Please, try again.'), 'flash_error');
}
} else {
$this->Session->setFlash(__($error_message), 'flash_error');
}
}
$talents = $this->Portfolio->Talent->find('list');
$skills = $this->Portfolio->Skill->find('list', array(
'order' => array('Skill.name ASC')
));
$this->set(compact('talents', 'skills'));
}
Вид -
<input type = "file" name = "data[Portfolio][media_url_file][]" class = " validate[] m-wrap large" id = "PortfolioMediaUrlFile" multiple>
Эта структура моей базы данных База данных: - введите описание изображения здесь
сгенерированный массив-. с помощью foreach не удалось сохранить этот массив в базе данных.
Array
(
[Portfolio] => Array
(
[talent_id] => 435
[title] => asas
[status] => Approved
[type_of_media] => picture
[file] => Array
(
[0] => Array
(
[name] => wi-logo.png
[type] => image/png
[tmp_name] => /tmp/phpn8ne7a
[error] => 0
[size] => 17457
)
[1] => Array
(
[name] => unnamed.png
[type] => image/png
[tmp_name] => /tmp/phpPcqpQw
[error] => 0
[size] => 14362
)
)
[media_url] => Array
(
[0] => Array
(
[name] => wi-logo.png
[type] => image/png
[tmp_name] => /tmp/phpn8ne7a
[error] => 0
[size] => 17457
)
[1] => Array
(
[name] => unnamed.png
[type] => image/png
[tmp_name] => /tmp/phpPcqpQw
[error] => 0
[size] => 14362
)
)
)
)
этот код предназначен для разовой загрузки. и я хочу несколько загрузок с несколькими столбцами.
Я пытаюсь использовать один элемент ввода файла для загрузки нескольких файлов. хотя средство выбора файлов позволяет выбрать несколько файлов и создать несколько массивов. но тогда как мне сохранить несколько массивов с помощью цикла foreach
Пожалуйста, поделитесь своим окончательным массивом.






Если он работает для одной загрузки, его можно расширить до нескольких. Почему бы не создать несколько полей ввода? Каждый файл имеет собственный ввод. дайте каждому входу уникальное имя, и в контроллере вы можете ссылаться на вход в цикле
$this->request->data['Portfolio1']
$this->request->data['Portfolio2']
$this->request->data['Portfolio3']
...
Я пытаюсь использовать один элемент ввода файла для загрузки нескольких файлов. хотя средство выбора файлов позволяет выбрать несколько файлов и создать несколько массивов. но тогда как мне сохранить несколько массивов с помощью цикла foreach
Хорошо! Итак, вы получаете массив со всеми загруженными файлами? Вы можете опубликовать этот массив
Думаю, теперь я понимаю проблему. Вы хотите сохранить запрошенные данные, но ваши данные содержат массивы, которые не работают. Итак, вам нужно создать массив данных, который соответствует вашей структуре db. Здесь я не понимаю, почему у вас есть «file» и «mediaurl», которые содержат одни и те же данные. Но вот мое решение:
$this->Portfolio->create();
for($i = 0;$i < $this->request->data['Portfolio'][file];i++){
$dataArray = [];
//fill in your data which will be the same for each uploaded file
$dataArray['talen_id'] = $this->request->data['Portfolio']['talen_id'];
$dataArray['title'] = $this->request->data['Portfolio']['title'];
$dataArray['status'] = $this->request->data['Portfolio']['status'];
$dataArray['picture'] = $this->request->data['Portfolio']['picture'];
//fill in your data which is different for each uploaded file
$dataArray['media_url'] = $this->request->data['Portfolio']['media_url'][$i]['name'];
$dataArray['file'] = $this->request->data['Portfolio']['file'][$i]['name'];
//now you can save the data
$this->Portfolio->save($dataArray);
}
Вы получаете сообщение об ошибке при загрузке нескольких изображений или при сохранении данных? Вы хотите сохранить несколько имен изображений в одном столбце?