Page 1 sur 1

boucle foreach avec session array

Posté : 06 févr. 2008, 21:17
par Invité
Bonjour, je voudrais bouclé sur des valeurs qui sont en session mais j'ai l'erreur Invalid argument supplied for foreach() in

Voici le bout de code :

Code : Tout sélectionner

<?php foreach($_SESSION['vehicule'] as $val) { foreach($val as $value) { echo htmlentities($value).'&nbsp;'; } } ?>
Est ce possible de boucler comme ceci ? Bon désolé si vous avez les cheveux qui se dressent en lisant mon code mais je commence à peine en php.
Merci de l'aide.

Posté : 06 févr. 2008, 21:23
par Berzemus
C'est gentil de mettre la moitié du message d'erreur, sinon, ce serait trop facile :roll: ..

Je prends les paris sur le second foreach(), et du fait que $val retourné par le premier foreach n'est pas un tableau, mais une chaine, et que donc, on ne peut utiliser foreach dessus. Même qu'un petit "echo $val", à l'intérieur du premier foreach, permettrait de vérifier mes dires (ou pas) :D .

Posté : 06 févr. 2008, 22:15
par Truc
Ptet que c'est le premier foreach() :idea: :!: :?: :lol:

Dans tous les cas le message d'erreur te dit que l'argument [... coupé pour économiser de la place sur le forum ...] :langue:

... l'argument (le 1er) passé à foreach() n'est pas un tableau

Posté : 07 févr. 2008, 02:14
par Sékiltoyai
Oui, et au passage, si tu ne sais pas ce qu'il y a dans ta variable, var_dump() est ton ami…

Posté : 07 févr. 2008, 10:25
par Invité
Salut si je n'ai pas mis le reste c'est que cela n'aide pas. La suite du message est juste le fichier php et le numéro de la ligne pour laquelle j'ai l'erreur et cela indique le premier foreach.
J'initialise ma variable de session de cette façon :

Code : Tout sélectionner

$_SESSION['vehicule']['vehicule_marque'] = $vehicule_marque; //Autres propriétés d'un véhicule mis en session de la même manière.
Donc pour moi c'est bien un array sa.
Sinon si le foreach ne fonctionne pas je pourrai essayé un autre type de boucle, mais le foreach avait l'air sympathique.

Posté : 07 févr. 2008, 10:28
par Sékiltoyai
var_dump() est ton ami…
Montre nous en le résultat, pour vérifier que c"est bien un tableau…

Posté : 07 févr. 2008, 10:40
par Berzemus
et cela indique le premier foreach.
c'est vrai que c'est souvent inutile, le numéro de la ligne. Je configurerais bien mon php pour qu'il ne me l'affiche plus. Les défis, j'adore :wink: .

Ceci dit, je remets 10 brouzoufs sur le second foreach, à moins que $vehicule_marque soit un tableau.

Posté : 07 févr. 2008, 10:52
par Invité
J'ai aussi testé de cette manière :

Code : Tout sélectionner

foreach($_SESSION['vehicule'] as $val) { echo htmlentities($val).'&nbsp;'; }
Avec la même erreur

Posté : 07 févr. 2008, 11:25
par Berzemus
Ah.. perdu alors..

Et que donne
var_dump($_SESSION['vehicule']);
comme suggéré par Sékiltoyai

Posté : 07 févr. 2008, 13:06
par Invité

Code : Tout sélectionner

var_dump($_SESSION['vehicule']);
renvoi NULL. Je ne comprend pas pourquoi dailleurs.
Dans mon code j'ai bien

Code : Tout sélectionner

$_SESSION['vehicule']['vehicule_id'] = $vehicule_id; //autres propriétés mises en session header("Status: 301 Moved Permanently"); header("Location: photo.php");
c'est dans photo.php que j'effectue la boucle foreach.
Est ce la redirection qui pourrait poser problème sinon je vois pas, c'est super simple comme code, mais cela ne fonctionne pas.

Posté : 07 févr. 2008, 14:12
par Truc
un (des) session_start() quelque part ?

Posté : 07 févr. 2008, 14:38
par Invité
Non j'ai un script qui gère la session de l'utilisateur identifié, mais je l'ai retiré pour les tests. C'est surement sa le problème alors. Juste pour précision, le session_start() je ne doit le mettre qu'une seule fois non dans le premier script ? Sinon a chaque fois il va me créer une nouvelle session et effacer les variables que j'avais déja en session c'est bien sa ?

Posté : 07 févr. 2008, 15:30
par Truc
Non, tu dois le mettre dans chaque fichier de script pour (grossomodo) "signaler" que des variables de session vont être utilisées.

Si un fichier B est inclus dans un fichier A alors seul dans le fichier A tu dois faire appel a session_start().