IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Zend_Db PHP Discussion :

Insertion de données issues d'une multicheckbox [ZF 1.11]


Sujet :

Zend_Db PHP

  1. #1
    Futur Membre du Club
    Inscrit en
    Février 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 11
    Points : 8
    Points
    8
    Par défaut Insertion de données issues d'une multicheckbox
    Salutations.

    Pardonnez cette question digne d'une débutante, mais je ne trouve pas de solution à mon souci.

    J'ai suivi le didacticiel 'Débuter avec Zend Framework 1.10' sans souci et j'ai approfondi mes connaissances via divers mini-projet test.

    Je rencontre aujourd'hui un souci que je n'arrive pas à résoudre. Dans un formulaire qui fonctionnait j'ai ajouter une multicheckbox.

    Le formulaire pour ajouter ou modifier une entrée s'affiche correctement, mais si je le valide j'obtiens une page blanche.

    Je n'ai pas réussi à afficher la requête généré par Application_Model_DbTable_Utlisateurs. J'ai testé la méthode fourni dans la FAQ 'Comment récupérer les erreurs retournées par la base de données ?' mais cela ne me retourne rien.

    Je n'ai pas réussi à trouver comment sont stocker les valeurs retournées par une multicheckbox en base avec Zend.

    Cela me retourne bien un tableau avec les valeurs cochés, mais ensuite ?

    Désolée si ma question semble décousue, mais ayant du mal à appréhender le problème j'ai aussi du mal à l'exprimer. Si je retire ma case à cocher du formulaire et la variable associé dans le model_dbtable associé tout fonctionne bien.

    Merci.

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Il faudrait que tu nous montres le code de ton formulaire, de ton contrôleur et de ton modèle pour qu'on puisse t'aider.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Futur Membre du Club
    Inscrit en
    Février 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 11
    Points : 8
    Points
    8
    Par défaut
    Bonjour

    bien sur tout à fait, où avais-je la tête.

    Voici le code que je test et que je n'arrive pas à faire fonctionner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    class Application_Form_Checkbox extends Zend_Form
    {
     
        public function init()
        {
            /* Form Elements & Other Definitions Here ... */
     
            $this->setName('checkbox');
     
            $id = new Zend_Form_Element_Hidden('id');
            $id->addFilter('Int');
     
            $choix = new Zend_Form_Element_MultiCheckbox('choix');
            $choix->setLabel('Choix')
                  ->addMultiOptions(array(1 => '1', 2 => '2', 3 => '3', 4 => '4'));
     
            $envoyer = new Zend_Form_Element_Submit('envoyer');
            $envoyer->setAttrib('id', 'boutonenvoyer');
     
            $this->addElements(array($id, $choix, $envoyer));
        }
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    class Application_Model_DbTable_Checkboxes extends Zend_Db_Table_Abstract
    {   
    public function ajouterCheckbox($choix)
        {
            $data = array('choix' => $choix);
            $this->insert($data);
        }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    class IndexController extends Zend_Controller_Action
    {
     
        public function init()
        {
            /* Initialize action controller here */
        }
     
        public function indexAction()
        {
            // action body
        }
     
        public function ajouterAction()
        {
            // action body		
    		$form = new Application_Form_Checkbox();
    		$form->envoyer->setLabel('Ajouter');
    		$this->view->form = $form;
     
    		if ($this->getRequest()->isPost()) {
    			$formData = $this->getRequest()->getPost();
    			if ($form->isValid($formData)) {
    				$choix = $form->getValue('choix');
    				$checkboxes= new Application_Model_DbTable_Checkboxes();
    				$checkboxes->ajouterAlbum($choix);
     
    				$this->_helper->redirector('ajouter');
    			} else {
    				$form->populate($formData);
    			}
    		}
        }
     
     
    }
    J'ai testé différente chose pour la récupération du formulaire ou l'insertion dans la base mais je suis dans une impasse avec les cases à cocher j'avoue.

    merci.

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Dans ton modèle, il manque la définition de la table ; on ne sait pas à quelle table de la BDD fait référence cette classe.

    La fonction de ce modèle s'appelle ajouterCheckbox mais dans ton contrôleur tu appelles la fonction ajouterAlbum qui vient du tuto.

    Je crois n'avoir jamais utilisé de multi-checkbox et ça fait un moment que je n'ai plus touché à Zend Framework alors je ne suis pas sûr de ce qui suit mais il me semble que, puisque l'utilisateur peut choisir plusieurs options dans la multi-checkbox, le résultat récupéré est un array et je crains que ta fonction ajoutercheckbox ne fonctionne qu'avec une valeur unique.

    Zend Framework est un peu déroutant au début mais ensuite c'est vrai qu'on peut développer assez rapidement des programmes qui tiennent la route.

    Bon courage !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre éprouvé
    Avatar de 5h4rk
    Homme Profil pro
    CTO at TabMo
    Inscrit en
    Février 2011
    Messages
    813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : CTO at TabMo
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2011
    Messages : 813
    Points : 1 297
    Points
    1 297
    Par défaut
    Je confirme ce que dit CinePhil, un checkbox multiple à le même fonctionnement qu'un select multiple.

    Du coup tu récupèrera un tableau correspondant au name de ton checkbox

  6. #6
    Futur Membre du Club
    Inscrit en
    Février 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 11
    Points : 8
    Points
    8
    Par défaut
    Oops bien vu pour le ajouterAlbum, j'ai recoder rapidement un formulaire contenant juste la checkbox pour tester avant de poster.

    Cependant j'ai toujours un An error occurred // Application error sur la récupération du formulaire après correction.

    J'ai créé une table checkbox pour tester les retours comme suit (c'est à la rache mais c'était pour tester le type de retour)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    CREATE TABLE IF NOT EXISTS `checkbox` (
      `choix` varchar(255) DEFAULT NULL,
      `choix[]` varchar(255) DEFAULT NULL,
      `choix-0` varchar(255) DEFAULT NULL,
      `choix-1` varchar(255) DEFAULT NULL,
      `choix-2` varchar(255) DEFAULT NULL,
      `choix-3` varchar(255) DEFAULT NULL,
      `choix-4` varchar(255) DEFAULT NULL,
      `id` int(11) NOT NULL AUTO_INCREMENT,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
    merci pour vos retour, j'essaie de continuer de chercher de mon côté. Je vais regarder pour les multiselect car je ne les ai pas testé encore non pus avec Zend form.

    merci à tantôt
    Maosalia.

  7. #7
    Membre éprouvé
    Avatar de 5h4rk
    Homme Profil pro
    CTO at TabMo
    Inscrit en
    Février 2011
    Messages
    813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : CTO at TabMo
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2011
    Messages : 813
    Points : 1 297
    Points
    1 297
    Par défaut
    Où récupére tu ton formulaire car moi je ne vois rien dans ton code dans ton controller qui permet de récupérer ton formulaire, car chaque action est vide

  8. #8
    Futur Membre du Club
    Inscrit en
    Février 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 11
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par 5h4rk Voir le message
    Où récupére tu ton formulaire car moi je ne vois rien dans ton code dans ton controller qui permet de récupérer ton formulaire, car chaque action est vide
    Je n'ai recopié que le code de l'action ajouter et tu as dedans la récupération du formulaire.
    Dans l'action ajouter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if ($this->getRequest()->isPost()) {
    			$formData = $this->getRequest()->getPost();
    			if ($form->isValid($formData)) {

  9. #9
    Membre éprouvé
    Avatar de 5h4rk
    Homme Profil pro
    CTO at TabMo
    Inscrit en
    Février 2011
    Messages
    813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : CTO at TabMo
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2011
    Messages : 813
    Points : 1 297
    Points
    1 297
    Par défaut
    Je t invite à ajouter ZFDebug à ton application car là c est dur de voir ton erreur

  10. #10
    Futur Membre du Club
    Inscrit en
    Février 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 11
    Points : 8
    Points
    8
    Par défaut
    Bonjour,

    merci beaucoup pour ZF Debug que je ne connaissais pas et grâce à qui tout est rentré dans l'ordre.

    en fait, l'erreur était ailleurs mais révélée par l'ajout des checkbox dans le formulaire...

    par contre il me sauvegarde le résultat de la multi checkbox en Array dans la base, et j'ai une erreur du type : Notice: Array to string conversion in C:\php\includes\Zend\Db\Statement\Pdo.php on line 228

    Je vais enquêter là dessus.

    merci encore pour votre aide et votre patience

    ___edit___

    J'ai corrigé le souci du array to string en ajoutant dans les fonctions ajouter et modifier du Application_Model_DbTable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $choix_temp = '';
     
    foreach ($data['choix'] as $choix):
    	$choix_temp .= $choix.',';
    endforeach;
     
    $data['choix'] = substr($choix_temp,0,-1)
    et en modifiant dans l'action modifier de mon contrôleur le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $form->populate($referents->obtenirReferent($id));
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $formdata = $referents->obtenirReferent($id);
    $formdata['choix'] = explode(',', $formdata['choix']);
     
    $form->populate($formdata);
    Ce n'est peut être pas la meilleur façon de procéder et je vais continuer à chercher la bonne écriture, mais en l'état ça fonctionne parfaitement.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Autocomplétion à partir de données issues d'une base
    Par maxnad dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 01/02/2007, 16h54
  2. Réponses: 2
    Dernier message: 07/03/2006, 00h31
  3. Import de données issues d'une base Paradox
    Par fgo dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 02/03/2006, 08h33
  4. Réponses: 7
    Dernier message: 27/01/2006, 15h57
  5. [VB NET] [ADO NET]: Insertion de données DATE ds une BDD ??
    Par ADONET dans le forum Windows Forms
    Réponses: 1
    Dernier message: 01/01/2006, 20h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo