Précédent   Forum des professionnels en informatique > PHP > Outils > Zend > Zend Framework > MVC
MVC Forum de support sur le développement d'applications de type modèle-vue-contrôleur avec Zend Framework ainsi que vos questions sur les plugins, les helpers etc. Avant de poster -> Cours MVC, FAQ ZF Controller
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 20/05/2007, 13h31   #1
Invité de passage
 
Inscription : décembre 2005
Messages : 10
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 10
Points : 2
Points : 2
Par défaut Problème pour récupérer une variable en Post()

Bonjour,

Je viens de me mettre au Zend Framework, et je rencontre un petit souci.
Je posséde un formulaire ( la méthde d'envoie est POST) contenant une liste déroulante, autorisant la selection mulitiple, de ce type :

Code :
1
2
3
4
5
6
7
8
9
10
11
<tr>
<td><label for="competences">Compétences:</label></td>
<td>
	<select name="competences[]" multiple="true">
	<?php foreach($this->competences as $compet) 
 
                    echo "<option id='$this->escape($compet->compet_id)' value='$this->escape($compet->compet_id)'>$compet->compet_libelle</option>";
	?>
	</select>
</td>
</tr>
Dans le controllers qui doit s'occuper de l'action du formulaire, j'arrive a récupérer l'ensemble des variables cependant lorsque je veux parcourrir la liste des compétence séléctionnées a l'aide d'une boucle foreach j'ai le message d'erreur suivant:
Citation:
Warning: Invalid argument supplied for foreach() in C:\wamp\www\Zend_XML\application\controllers\IndexController.php on line 44
Voici comment je récupere ma variable compétence :
Code :
$compet = trim($filter->filter($this->_request->getPost('competences')));
et la boucle foreach qui suit (pour l'instant j'essaye juste de voir si j'arrive à récuperer les valeurs de la liste d'oû le petit code javascript a l'interieur de la boucle) :
Code :
1
2
3
4
foreach($compet as $valeur)
{
      echo "<script>alert('".$valeur."')</script>";
}
Donc, j'aurai voulu savoir comment récupérer une liste provenant d'une selection multiple.

Merci d'avance pour votre aide.

Pour information j'utilise WAMP5 version 1.6.0.
bodeuc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2007, 20h11   #2
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
Salut

L'instruction foreach est très pratique mais elle a généralement un défaut (à mon sens) : si le tableau existe mais qu'il est vide, alors foreach envoie un warning.

Essaie de mettre la boucle foreach dans un test empty() ou dans son équivalent ZF.
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2007, 21h08   #3
Invité de passage
 
Inscription : décembre 2005
Messages : 10
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 10
Points : 2
Points : 2
Je viens d'essayer en mettant la boucle foreach dans un test !empty($compet):

Code :
1
2
3
4
5
6
7
8
 
if(!empty($compet))
{
	foreach($compet as $value)
	{
		echo"<script>alert('".$value."');</script>";
	}
}
ma variable n'est pas vide et j'ai la même erreur. C'est assez étrange.
bodeuc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2007, 21h17   #4
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
Je parlais de :
Code :
if(!empty($this->competences))
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2007, 21h54   #5
Invité de passage
 
Inscription : décembre 2005
Messages : 10
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 10
Points : 2
Points : 2
Le probleme avec le foreach a lieu dans le controller, ma liste dans la vue ce rempli correctement.

De ce fait si j'utilise $this->competences dans le controller il ne reconnaitra pas la variable.

En faisant le test avec $this->compet, il me renvoie que ma variable n'est pas vide et essaye d'executer le foreach ce qui me retourne l'erreur.

Si j'essaye d'afficher dans un alert cette même variable il m'affiche "Array".
bodeuc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2007, 22h21   #6
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
Je sais pas pourquoi je n'arrive pas à me faire comprendre mais ceci :
Code :
foreach($this->competences as $compet)
Est une boucle foreach sur la variable dont je te parle : $this->competences. Encapsule le code ci-dessus dans un test if(!empty($this->competences)) et ça devrait bien se passer. Non ?
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2007, 23h11   #7
Invité de passage
 
Inscription : décembre 2005
Messages : 10
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 10
Points : 2
Points : 2
Toujours le même le probleme ma liste ce rempli correctement mais côté controllers quand je désire récuperer ma sélection j'ai le même probleme.
bodeuc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2007, 23h47   #8
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
Peux-tu montrer ici la ligne 44 incriminée ?
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/05/2007, 10h21   #9
Invité de passage
 
Inscription : décembre 2005
Messages : 10
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 10
Points : 2
Points : 2
Code :
1
2
3
4
5
6
7
8
 
//je récupére ma liste de selection
$compet = trim($filter->filter($this->_request->getPost('competences')));
 
 
//je parcours ma liste
foreach($compet as $value)
{
La ligne 44 est la ligne du foreach.
bodeuc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/05/2007, 10h24   #10
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
Tu appliques trim() à un tableau ?
Je n'avais aps remarqu
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/05/2007, 19h02   #11
Invité de passage
 
Inscription : décembre 2005
Messages : 10
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 10
Points : 2
Points : 2
Oui c une petite erreur que j'ai rectifié ( ah les pieges du copier/coller ) mais le probleme ne vient pas la. Une fois trim() enlevé j'ai le même souci.
bodeuc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/05/2007, 19h20   #12
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
Fais un var_dump() de la variable juste avant le foreach, pour voir ?
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/05/2007, 19h44   #13
Invité de passage
 
Inscription : décembre 2005
Messages : 10
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 10
Points : 2
Points : 2
ok.

Aprés le var_dump(), il s'avére que ma variable est reçu par le controller comme une chaine de caractere contenant la valeur de la derniere ligne sélectionnée.
bodeuc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/05/2007, 20h44   #14
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
As-tu essayé
Code :
foreach($this->_request->competences) ?
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/05/2007, 20h58   #15
Invité de passage
 
Inscription : décembre 2005
Messages : 10
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 10
Points : 2
Points : 2
Oui j'ai essayé et c le même probléme.
bodeuc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/05/2007, 21h37   #16
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
Donne-voir le tag <form>, stp ?
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/05/2007, 22h14   #17
Invité de passage
 
Inscription : décembre 2005
Messages : 10
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 10
Points : 2
Points : 2
Voila le tag <form> :

Code :
1
2
3
4
 
 
<FORM method='post' action='<?php echo $this->baseUrl ?>/index/<?php
echo $this->action; ?>' name='formInscri'>
bodeuc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/06/2007, 08h16   #18
Invité de passage
 
Inscription : décembre 2005
Messages : 10
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 10
Points : 2
Points : 2
Probleme résolu, fallait juste ne pas passer par la méthode filter.
bodeuc 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 02h55.


 
 
 
 
Partenaires

Hébergement Web