Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
j'ai un formulaire contenant un élément Zend_Form_Element_File. Ce formulaire est utilisé dans un backoffice et permet d'uploader un fichier et d'indiquer le path de celui-ci dans la base de données.
Ca fonctionne très bien lors de la création d'une entrée mais lors d'une mise à jour, je n'arrive pas à lier la valeur de la base de données avec cet élément. Il reste vide est met à jour le champ avec une valeur nulle.
Est-il possible de gérer cela ou faut-il faire appel à un autre élément ?
Je n'ai pas trouvé d'informations dans la documentation...
Merci,
auré
Hors ligne
Je pense qu'il faut que tu testes dans ton controlleur si la valeur retournée par ton Element_File est vide lors d'une mise à jour. Si elle est vide, alors ça voudra dire que tu ne souhaites pas modifier la valeur, et donc tu n'a qu'à repasser ton ancienne valeur à tes données devant être à jour...
Hors ligne
Bonjour,
merci pour vos réponses.
Je récupère le fichier uploadé (ainsi que les autres valeurs de mon formulaire) avec:
$values = $form->getValues();
Je n'utilises donc pas 'receive()'.
Merci,
auré
Dernière modification par aure (11-05-2009 13:31:37)
Hors ligne
Tu peux faire un $element->setValueDisabled(true) sur ton element_file, et dans ton contrôleur, après ton getValues(), tu testes si tu as bien reçu le fichier
if(!form->element->receive()) { echo 'erreur pendant l'upload'; }
Dernière modification par Djules (11-05-2009 14:16:40)
Hors ligne
Merci Djules.
Je viens de tester mais en faisant cela, si je n'indique pas de fichier à mon élément dans le formulaire, le test dans le contrôleur considère malgré tout qu'un fichier a été envoyé...
Le code de mon contrôleur qui gère l'ajout d'une entrée:
if($this->getRequest()->isPost() && $form->isValid($_POST)) { $form->_imgUrl->setDestination('C:\wamp\www\public\image\competition'); $adapterImgUrl = $form->_imgUrl->getTransferAdapter(); foreach($adapterImgUrl->getFileInfo() as $file=>$info) { $name = $info['name']; $ext = substr(strrchr($name,'.'),1); $fileName = Zend_Date::now()->toString('ddMMyyyyHHmmss') . '.' . $ext; $tmpName = $info['tmp_name']; $path = 'C:\wamp\www\public\image\competition\\'; $filterFileName = new Zend_Filter_File_Rename(array( 'target'=>$path . $fileName, 'overwrite'=>true)); $adapterImgUrl->addFilters(array($filterFileName)); } $values = $form->getValues(); if(!$form->_imgUrl->receive()) { $values['com_imgurl'] = 'error'; } else { $values['com_imgurl'] = substr($path . $fileName, 20); } $competition->setFromArray($values, $competition->toArray()); $competition->save(); }
Merci,
auré
Hors ligne
Bonjour,
en fait avec cet élément, je rencontre deux problèmes (qui sont assez proches...).
Je voudrais, lors d'une création d'une entrée de base de données, si aucun fichier n'est uploadé, transmettre la valeur NULL au champs concerné. Et je voudrais que lors d'un mise à jour d'une entrée dans la base de données, si aucun nouveau fichier n'est uploadé garder la valeur se trouvant déjà dans la base de données.
Ce sera donc pratiquement le même traitement à faire pour ces deux problématiques.
Merci,
auré
Hors ligne
aure a écrit:
je voudrais que lors d'un mise à jour d'une entrée dans la base de données, si aucun nouveau fichier n'est uploadé garder la valeur se trouvant déjà dans la base de données.
Bon déja, j'imagine que tu dois avoir au préalable récupéré tes données à partir de la base, donc tu pourras te resservir de ton ancienne valeur pour l'image.
// tu pré-remplis ton champ avec l'ancienne valeur $form->_imgUrl->setValue("ta donnée actuelle"); // ton champ sera vide à l'affichage mais normalement l'ancienne valeur sera prise en compte
aure a écrit:
Je voudrais, lors d'une création d'une entrée de base de données, si aucun fichier n'est uploadé, transmettre la valeur NULL au champs concerné.
Là je pense qu'en testant la valeur ainsi ça devrait être bon
if($form->_imgUrl->getValue() == '') { $values['com_imgurl'] = null; }
Désolé si je me suis trompé dans tes noms de variable...
Hors ligne
Merci Djules.
Ca fonctionne, mais j'ai du modifier:
if($form->_imgUrl->getValue() == '') { $values['com_imgurl'] = null; }
J'ai remplacé par:
if($form->_imgUrl->getValue() != '') { $values['com_imgurl'] = null; }
Je ne comprends pas pourquoi, ça me paraissait logique d'avoir une égalité...
Merci,
auré
Dernière modification par aure (12-05-2009 18:31:24)
Hors ligne
Euh... Je ne comprends pas pourquoi une inégalité doit passer ta variable à null.
C'est si tu n'a pas rempli le champ que tu souhaites mettre la valeur null dans ta base, c'est bien ça ?
Et si malgré tout ton problème est résolu n'oublie pas de mettre ton sujet en [résolu]
Hors ligne
bonjours, désolé pour le revival, pour le input file, il est impossible de lui mettre une valeur à partir d'un script, la seule donnée provient d'un lien vers un fichier existant quelque part. Comme on le sait c'est pour récupérer un fichier sur son ordinateur. On ne peut donc pas mettre un lien à l'insu de l'internaute donc il est protégé en écriture.
Le plus simple pour toi c'est de regarder si un fichier a été uploadé avec la methode isUploaded() et de là tu fais ton traitement.
Hors ligne
Pages: 1