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

Langage PHP Discussion :

[Tableaux] Probleme de Foreach imbriqué


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 8
    Points : 7
    Points
    7
    Par défaut [Tableaux] Probleme de Foreach imbriqué
    bonjour tout le monde j ai un soucis avec mon foreach imbriqué.

    j ai une erreur du type :

    Warning: Invalid argument supplied for foreach() in D:\PHP\eclipse\pizzeria\pizza.php on line 130
    je me dis ok erreur , après vérification par mon prof il teste sur sa machine sous linux et la miracle ca marche sans problème.

    Donc je remet en cause les réglages de mon serveur web apache ( easyphp 2B1 donc ùysql5 et php5 en local)

    voila la fonction en question si vous voyez une erreur évidente merci d'avance je suis encore débutant !

    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
    function show_pizza ()
    {
    	global $dsn; // Connexion a la DB via PDO
     
    	$sql_show_pizza="SELECT * from pizza;";
     
    	echo "<center>";
    	echo "<table border=1><tr><th>ID</th><th>NOM</th><th>INGREDIENT</th></tr>";	
     
    	foreach ($dsn->query($sql_show_pizza) as $row)	
    	{
    			$sql_show_ing="SELECT * from pizza_ingredients join ingredients on ing_id=pizzaing_iding WHERE pizzaing_idpizza = ${row['piz_id']};";  //requete de JOIN
     
    			echo "<tr><td>".$row['piz_id']."</td><td>".$row['piz_nom']."</td>";
    			echo "<td>";
     
    				foreach ($dsn->query($sql_show_ing) as $row2)
     
    				{
    					 echo " ".$row2['ing_nom'].",";
    				}
    	}
     
    	echo "</td></tr></table></body></html>";
     
    }
    Merci d avance pour toute aide

  2. #2
    Membre confirmé Avatar de stunti
    Inscrit en
    Mai 2006
    Messages
    520
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mai 2006
    Messages : 520
    Points : 594
    Points
    594
    Par défaut
    $dsn->query($sql_show_ing) retourne quoi ?
    Ce n'est pas une fonction standard PHP.
    Je suppose que c'est le resultat de la fonction mysql_fetch_assoc.
    Le meilleur moyen pour voir ce qui cloche, c de faire un print_r du retour de la fonction avant le 2eme foreach

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    echo "<td>";
    $tmp =$dsn->query($sql_show_ing);
    echo '<pre>';print_r($tmp);echo '</pre>';
    echo'---------------------------------------------------<br/>';
    foreach ($tmp as $row2){

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    merci pour ta reponse, je vais essayer ton idée tout a l heure et voir ce qui se passe.

    Pour ce que renvoie le $dsn->exec($sql) c est en fait PDO que j utilise pour effectuer mes requetes sur la DB, mais apaprment oui c est comme un fetch array ou mysqli.

    Par contre j ai oublier de preciser ,le 1er foreach fonctionne bien , le problème se pose avec le 2eme uniquement.

    merci de ton aide

  4. #4
    Membre averti Avatar de BornBanane
    Homme Profil pro
    dev
    Inscrit en
    Mars 2007
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Mars 2007
    Messages : 284
    Points : 416
    Points
    416
    Par défaut
    Hum sinon, peut etre qu'il a un soucis avec la requête SQL et donc il ne retourne pas de tableau.

    Essaie de mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql_show_ing="SELECT * from pizza_ingredients join ingredients on ing_id=pizzaing_iding WHERE pizzaing_idpizza = ".$row['piz_id'].";";  //requete de JOIN
    Sinon essaie avec une requete SQL Bidon, pour voir si ca vient de la :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql_show_ing="SELECT * from pizza_ingredients;"

  5. #5
    Membre expérimenté
    Avatar de Rakken
    Homme Profil pro
    Inscrit en
    Août 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 257
    Points : 1 341
    Points
    1 341
    Par défaut
    je me dis ok erreur , après vérification par mon prof il teste sur sa machine sous linux et la miracle ca marche sans problème.
    Donc je remet en cause les réglages de mon serveur web apache ( easyphp 2B1 donc mysql5 et php5 en local)
    Ici, tu n'a pas une erreur, mais un warning. La difference est que le warning n'empeche pas ton script de s'excuter correctement. Si ca ne s'affiche pas sur le serveur de ton prof, c'est parce qu'il n'as pas les mêmes directives d'affichage des warnings dans son php.ini.
    Alors là, tu vas avoir envie de te dire, ben j'vais prendre celle de mon prof, y a moins d'erreur. En fait, quand on programme, et notamment quand on apprend, il est très recommandé d'avoir le maximum de warning d'affiché, ca te permet d'apprendre a coder "proprement". Avec l'experience, je dirai même que ca t'aide a programmer plus vite, parce que les warnings sont en règles générales assez facile à supprimer et sont souvent symptômatique d'un problème plus grave que tu résoud du même coup (Typiquement, tu te rend compte que tu as oublié de gerer un cas).

    Naturellement, dans ton cas, je dirait que $dsn->query($sql_show_pizza) n'est pas toujours un tableau. En suivant ce que t'as dit stunti, tu pourras voir le contenu réel de la chose et mettre les protections qui vont bien.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    Apres quelques petits test sur les requetes , ca ne renvoie pas grand chose je pense que cela bien du car lors du developement avec unepar exemple la requete etait bonne! Je vais plancher la dessus correctement des que j aurai un peu de temp. Merci pour vos réponses et vos conseils. Si certains ont des critiques quand a la logique de mon code ou autre, je serai ravie de les entendre afin de pouvoir m ameliorer!

    Merci en tout cas, je vous tiens informés si il y a du nouveau!

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

Discussions similaires

  1. [Tableaux] probleme d'addition et soustration en php
    Par pierre987321 dans le forum Langage
    Réponses: 7
    Dernier message: 17/10/2005, 20h13
  2. Probleme avec requete imbriquée
    Par LeDoc dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 26/09/2005, 17h11
  3. [Tableaux] Probleme tableau
    Par chocobos dans le forum Langage
    Réponses: 3
    Dernier message: 10/09/2005, 11h34
  4. Probleme de Jointures imbriquées dans une requête
    Par Crevin dans le forum Langage SQL
    Réponses: 3
    Dernier message: 13/04/2005, 11h05

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