Page 1 sur 1

Warning sur liste select multiple

Posté : 18 nov. 2008, 19:55
par Alain78
J'ai une liste avec choix multiple.
Je récupère les valeurs sélectionnées par le user dans un tableau variables[] que je lis ensuite dans une boucle foreach

Le problème est qu'avant la sélection par le user un warning m'est affiché :
Warning: Invalid argument supplied for foreach() in droits_univers.php on line XXX

et pourtant lorsque le user a validé sa sélection le message disparait et les valeurs sélectionnées sont bien affichées.
Voici le code (extrait).

Trouvez vous le pourquoi du warning ?
echo "<select name='variables[]' size='3' multiple='multiple' >";
   	while ($row = mysql_fetch_assoc($resultat)) {
 		if ($valeur_init == $row["ref_univers"]) {
			echo "<option value=" . $row['ref_univers'] ." selected=\"selected\">" . $row['nom_univers'] . "</option>"; 
          	}else{
			echo "<option value=" . $row['ref_univers'] .">" . $row['nom_univers'] . "</option>"; 
        	}
	}
 echo '</select>';

foreach($variables as $univers) {
echo $univers.'<br/>';
}					

:oops: :oops:

Posté : 18 nov. 2008, 20:42
par Hywan
Hey :),

Où est déclarée ta variable $variables ? Il semblerait que ce ne soit pas un tableau.

Posté : 18 nov. 2008, 20:48
par Alain78
Merci .
En fait la variable est déclarée implicitement dans le select puisque la liste lui affecte des valeurs.

J'ai trouvé la solution.
Le warning venait effectivement du fait que je manipulais un tableau "caché" dans un select.
La solution est de rajouter le code ci après pour afficher correctement la récupération des valeurs SANS avoir un message warning.
if(isset($_POST['variables']) && !empty($_POST['variables'])){
	$Col1_Array = $_POST['variables'];
        foreach($Col1_Array as $univers){
                echo $univers."<br>";
:P :P

Posté : 18 nov. 2008, 21:19
par AB
Merci .
En fait la variable est déclarée implicitement dans le select puisque la liste lui affecte des valeurs.

J'ai trouvé la solution.
Le warning venait effectivement du fait que je manipulais un tableau "caché" dans un select.
La solution est de rajouter le code ci après pour afficher correctement la récupération des valeurs SANS avoir un message warning.
if(isset($_POST['variables']) && !empty($_POST['variables'])){
	$Col1_Array = $_POST['variables'];
        foreach($Col1_Array as $univers){
                echo $univers."<br>";
:P :P
En effet par mesure de sécurité, avec php5 on travaille avec register_global désactivé. Il faut donc toujours vérifier les variables provenant de l'extérieur.

Sinon pour info tu pourrais simplifier ton code car si !empty($_POST['variables']) est vrai alors nécessairement isset($_POST['variables']) le sera également.
Donc if(!empty($_POST['variables'])) est suffisant :wink: