Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour à tous, je voudrai savoir comment faire un Upload Multiple avec une Base de donnée avec Zend, je sais le faire pour une seul image mais avec plusieurs image en même temps je ne sais pas le faire.
j'ai une table Image(id,nom)
ensuite voici la form dans mon index.phtml
<form method="POST" action="<?php echo $this->url('upload')?>" enctype="multipart/form-data"> <div class="panel panel-primary"> <div class="panel-heading">Enter New Picture</div> <div class="panel-body"> <div class="form-group email required user_inline_email"><label class="email required sr-only" for="user_inline_email"><abbr title="required">*</abbr> URL</label><input name="image" placeholder="URL" type="file" multiple=""></div> <input class="btn btn-danger" type="submit" value="Add Picture"> </div> </div> </form>
puis dans mon indexcontroler
public function uploadAction() { $pubtable = $this->getServiceLocator()->get('Image\Model\ImageTable'); $request = $this->getRequest(); if($request->isPost()){ $File = $this->params()->fromFiles('image'); $data = array( 'nom' => $File['name'], ); $upload = new Http(); if($upload->isValid()){ $upload->setDestination('public/img'); if ($upload->receive($File['name'])){ $pubtable->insert_image($data); $this->redirect()->toRoute('home'); } }else { } } }
qu'est ce que je devrais rajouter à ce code pour avoir un upload multiple s'il vous plaît?
Merci d'avance
Hors ligne
Bon me revoilà j'ai modifié mon code, et maintenant les images vont dans le dossiers mais leur nom ne sont pas affiché dans la base de donnée pourquoi? voici mon code
public function uploadAction() { $pubtable = $this->getServiceLocator()->get('Image\Model\ImageTable'); $request = $this->getRequest(); $File = $this->params()->fromFiles('image[]'); $upload = new Http(); if($request->isPost()){ foreach($File['image']['name'] as $key => $name ){ $file_name = $key.$File['image']['name'][$key]; $data = array( 'nom' => $file_name['image'][$key], ); } if($upload->isValid()){ $upload->setDestination('public/img'); if ($upload->receive($File['image'])){ $pubtable->insert_image($data); return $this->redirect()->toRoute('home',array('action'=>'index')); } } } }
sa me met comme erreur
Invalid argument supplied for foreach() in C:\wamp\www\zend1\module\Application\src\Application\Controller\IndexController.php on line 40
Undefined variable: data in C:\wamp\www\zend1\module\Application\src\Application\Controller\IndexController.php on line 54
File:
C:\wamp\www\zend1\vendor\zendframework\zendframework\library\Zend\Db\Sql\Insert.php:97
Message:
values() expects an array of values or Zend\Db\Sql\Select instance
Hors ligne
Bonjour,
1) Les messages d'erreurs sont assez explicites, je ne vois pas exactement ce qu'il te manque pour le coup...
2) Pas d'appel au ServiceLocator dans les controllers, maintes fois répété sur ce forum, jamais appliqué (Dependancy injection pattern à la place).
3) Essaye avec ce bout de code une fois que tu l'auras compris et testé :
$file = $this ->getRequest()->getFiles()->toArray(); $post = array_merge_recursive ( $request ->getPost()->toArray(), $file ); // ton post est maintenant peuplé d'une collection de fichiers, tu peux traiter cela dans un service pour insérer les fichiers en base de donnée. |
Hors ligne