Précédent   Forum des professionnels en informatique > PHP > Outils > Zend > Zend Framework > Zend_Db
Zend_Db Forum d'entraide pour le composant Zend_Db du Zend Framework (création de requêtes, abstraction, ORM etc.). Avant de poster -> FAQ Zend_Db.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/09/2011, 13h28   #1
Invité de passage
 
Inscription : février 2007
Messages : 11
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 11
Points : 3
Points : 3
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.
maosalia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/09/2011, 14h29   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 11 029
Points : 18 324
Points : 18 324
Envoyer un message via MSN à CinePhil
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 de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/09/2011, 10h39   #3
Invité de passage
 
Inscription : février 2007
Messages : 11
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 11
Points : 3
Points : 3
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 :
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 :
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 :
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.
maosalia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/09/2011, 13h34   #4
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 11 029
Points : 18 324
Points : 18 324
Envoyer un message via MSN à CinePhil
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 de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/09/2011, 14h02   #5
Modérateur
 
Homme Loïc
Développeur Web
Inscription : février 2011
Messages : 678
Détails du profil
Informations personnelles :
Nom : Homme Loïc
Âge : 26
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2011
Messages : 678
Points : 1 041
Points : 1 041
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
5h4rk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/09/2011, 18h09   #6
Invité de passage
 
Inscription : février 2007
Messages : 11
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 11
Points : 3
Points : 3
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 :
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.
maosalia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/09/2011, 18h47   #7
Modérateur
 
Homme Loïc
Développeur Web
Inscription : février 2011
Messages : 678
Détails du profil
Informations personnelles :
Nom : Homme Loïc
Âge : 26
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2011
Messages : 678
Points : 1 041
Points : 1 041
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
5h4rk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/09/2011, 23h13   #8
Invité de passage
 
Inscription : février 2007
Messages : 11
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 11
Points : 3
Points : 3
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 :
1
2
3
if ($this->getRequest()->isPost()) {
			$formData = $this->getRequest()->getPost();
			if ($form->isValid($formData)) {
maosalia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2011, 00h21   #9
Modérateur
 
Homme Loïc
Développeur Web
Inscription : février 2011
Messages : 678
Détails du profil
Informations personnelles :
Nom : Homme Loïc
Âge : 26
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2011
Messages : 678
Points : 1 041
Points : 1 041
Je t invite à ajouter ZFDebug à ton application car là c est dur de voir ton erreur
5h4rk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2011, 09h26   #10
Invité de passage
 
Inscription : février 2007
Messages : 11
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 11
Points : 3
Points : 3
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 :
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 :
$form->populate($referents->obtenirReferent($id));
par
Code :
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.
maosalia est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h03.


 
 
 
 
Partenaires

Hébergement Web