Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 10-05-2009 12:59:25

aure
Membre
Lieu: Chimay, Belgique
Date d'inscription: 05-05-2009
Messages: 30
Site web

Zend_Form - Zend_Form_Element_File formulaire de mise à jour

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, wink

auré

Hors ligne

 

#2 11-05-2009 08:32:01

Djules
Membre
Date d'inscription: 29-03-2009
Messages: 52
Site web

Re: Zend_Form - Zend_Form_Element_File formulaire de mise à jour

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

 

#3 11-05-2009 09:53:12

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: Zend_Form - Zend_Form_Element_File formulaire de mise à jour

Y'a une méthode receive() qui est apparu récement. Es ce que tu l'utilises ?

Hors ligne

 

#4 11-05-2009 13:31:18

aure
Membre
Lieu: Chimay, Belgique
Date d'inscription: 05-05-2009
Messages: 30
Site web

Re: Zend_Form - Zend_Form_Element_File formulaire de mise à jour

Bonjour,

merci pour vos réponses.

Je récupère le fichier uploadé (ainsi que les autres valeurs de mon formulaire) avec:

Code:

$values = $form->getValues();

Je n'utilises donc pas 'receive()'.

Merci, wink

auré

Dernière modification par aure (11-05-2009 13:31:37)

Hors ligne

 

#5 11-05-2009 14:15:24

Djules
Membre
Date d'inscription: 29-03-2009
Messages: 52
Site web

Re: Zend_Form - Zend_Form_Element_File formulaire de mise à jour

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

Code:

if(!form->element->receive())
{
     echo 'erreur pendant l'upload';
}

Dernière modification par Djules (11-05-2009 14:16:40)

Hors ligne

 

#6 11-05-2009 15:34:17

aure
Membre
Lieu: Chimay, Belgique
Date d'inscription: 05-05-2009
Messages: 30
Site web

Re: Zend_Form - Zend_Form_Element_File formulaire de mise à jour

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:

Code:

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, wink

auré

Hors ligne

 

#7 12-05-2009 10:35:39

Djules
Membre
Date d'inscription: 29-03-2009
Messages: 52
Site web

Re: Zend_Form - Zend_Form_Element_File formulaire de mise à jour

Si j'ai bien compris, tu veux que si aucune nouvelle image a été transmise lors de la mise à jour, tu conserves l'ancienne, c'est bien ça ?

Hors ligne

 

#8 12-05-2009 13:14:57

aure
Membre
Lieu: Chimay, Belgique
Date d'inscription: 05-05-2009
Messages: 30
Site web

Re: Zend_Form - Zend_Form_Element_File formulaire de mise à jour

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, wink

auré

Hors ligne

 

#9 12-05-2009 16:32:36

Djules
Membre
Date d'inscription: 29-03-2009
Messages: 52
Site web

Re: Zend_Form - Zend_Form_Element_File formulaire de mise à jour

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.

Code:

// 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

Code:

if($form->_imgUrl->getValue() == '')
{
    $values['com_imgurl'] = null;
}

Désolé si je me suis trompé dans tes noms de variable...

Hors ligne

 

#10 12-05-2009 18:28:44

aure
Membre
Lieu: Chimay, Belgique
Date d'inscription: 05-05-2009
Messages: 30
Site web

Re: Zend_Form - Zend_Form_Element_File formulaire de mise à jour

Merci Djules.

Ca fonctionne, mais j'ai du modifier:

Code:

if($form->_imgUrl->getValue() == '')
{
    $values['com_imgurl'] = null;
}

J'ai remplacé par:

Code:

if($form->_imgUrl->getValue() != '')
{
    $values['com_imgurl'] = null;
}

Je ne comprends pas pourquoi, ça me paraissait logique d'avoir une égalité...

Merci, wink

auré

Dernière modification par aure (12-05-2009 18:31:24)

Hors ligne

 

#11 13-05-2009 08:39:14

Djules
Membre
Date d'inscription: 29-03-2009
Messages: 52
Site web

Re: Zend_Form - Zend_Form_Element_File formulaire de mise à jour

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] big_smile

Hors ligne

 

#12 16-05-2009 17:26:45

aure
Membre
Lieu: Chimay, Belgique
Date d'inscription: 05-05-2009
Messages: 30
Site web

Re: Zend_Form - Zend_Form_Element_File formulaire de mise à jour

Bonjour,

le problème persiste de façon totalement aléatoire.

Je pense que mes filtres influencent...

Merci, wink

auré

Hors ligne

 

#13 19-06-2009 10:18:07

throrin19
Membre
Date d'inscription: 01-03-2009
Messages: 318
Site web

Re: Zend_Form - Zend_Form_Element_File formulaire de mise à jour

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

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages