Pb avec mysql_fetch_assoc

Résolu
JésusLeGrec Messages postés 99 Statut Membre -  
 Utilisateur anonyme -
Bonjour,

Je fais un site pour un resto et j'importe des données d'une base de données mysql. En fait il y a une table pour les titre de menu et une autre pour les plats. Dans cette dernière, il y a une clé étrangère qui relie chaque plat à un menu précis.
Pour cela, je fais une requête imbriquée dans une autre. Sauf qu'il y aurai un problème avec mysql_fecth_assoc.

Donc voilà le script :

<?php
$cnx = mysql_connect('localhost', 'root','' );
mysql_query("SET NAMES UTF8");
mysql_select_db('site');
$requete = "SELECT * FROM menus";
$res = mysql_query($requete) or exit(mysql_error());
while ($menu = mysql_fetch_assoc($res))
{
echo '<span id="titre">'.$menu["LibMenu"]." : ".$menu["PrixMenu"].'</span>';
$SQL_plats = '"SELECT * FROM plats WHERE Num_Menu=".$menu["NumMenu"];';
$req_plats = mysql_query($SQL_plats);
while ($plats = mysql_fetch_assoc($req_plats));
{
echo '<br/>'.$plats["LibPlat"];
}
while ($plats = mysql_fetch_assoc($req_plats));
{
echo '<img src="'.$plats["ImgPlat"].'" alt="'.$plats["LibPlat"].'" title="'.$plats["LibPlat"].'"/>';
}
}
?>

Where is the problem ??? Je vous le demande, Docteur ??? ;-)
Je suis dans une situation désespérée!!! lol HELP ME!!! SOS

Merci d'avance !!!

--
Mourir, ce n'est rien. Commence donc par vivre.
Carpe diem

11 réponses

Résumé de la discussion

Problème d'affichage des titres de menu et des plats reliés par une clé étrangère dans une base MySQL, lié à une tentative de requêtes imbriquées et à l'utilisation incorrecte de mysql_fetch_assoc.
Les réponses soulignent la nécessité de refléter la structure des tables menus (NumMenu, LibMenu, PrixMenu) et plats (#Num_Menu, LibPlat, ImgPlat), et d'utiliser une requête correcte plutôt qu'une imbriquée, notamment via une jointure.
En fin de piste, il est recommandé d'utiliser une jointure entre menus et plats et de migrer vers mysqli ou PDO, afin d'éviter les erreurs liées à mysql_fetch_assoc et d'améliorer la robustesse globale.

Généré automatiquement par IA
sur la base des meilleures réponses
  1. Bertrand40 Messages postés 1344 Statut Membre 197
     
    Bonjour,

    Tu as quoi comme msg d'erreur ?

    J'ai regardé vite fait, et a priori il y a une erreur ici :
    $SQL_plats = '"SELECT * FROM plats WHERE Num_Menu=".$menu["NumMenu"];';

    $SQL_plats = 'SELECT * FROM plats WHERE Num_Menu="' . $menu["NumMenu"] . '"';

    @+
    0
    1. JésusLeGrec Messages postés 99 Statut Membre 2
       
      Alors, là, c'est radical MDR !!! J'ai plus que les titres de mes menus qui s'affichent. Avant, ils étaient séparés par les tableaux d'erreur, mais là, il n'y a plus rien du tout !!! Que le nom des menus.

      Et les messages d'erreurs (que j'ai oublié de donné) c'est
      Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in C:\[...] on line 36
      Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in C:\[...] on line 40
      En sachant que les lignes 36 et 40 c'est :
      while ($plats = mysql_fetch_assoc($req_plats));
      0
    2. Bertrand40 Messages postés 1344 Statut Membre 197
       
      Donc le problème se trouve dans le paramètre que tu indiques à $req_plats.
      Si tu l'enlèves il n'y a plus d'erreur non ? Apparemment tu envoies un booléen à ta requête.
      0
    3. JésusLeGrec Messages postés 99 Statut Membre 2
       
      Non, ça marche toujours pas.
      0
    4. Bertrand40 Messages postés 1344 Statut Membre 197
       
      Je pense que ça, ne te renvoie aucune erreur : $SQL_plats = 'SELECT * FROM plats';

      Le pb vient donc de ta condition (WHERE). Tu as fait un echo de la variable que tu passes en condition ?

      Si Num_Menu est un nombre, tu as essayé comme ça ?

      WHERE Num_Menu = ' . $menu['NumMenu'] . '
      0
  2. Lumpy-Rock Messages postés 76 Statut Membre 1
     
    Bonjour :)

    L'erreur se situe dans la requête :
    $SQL_plats = '"SELECT * FROM plats WHERE Num_Menu=".$menu["NumMenu"];'; 


    Essaie comme ça :
    $menuactuel = $menu["NumMenu"]; 
    $SQL_plats = "SELECT * FROM plats WHERE Num_Menu='$menuactuel'";


    Voilà pour ça. D'autre part, je te conseille de réunir ton fetch_assoc en 1, au lieu de faire deux boucles...
    0
  3. JésusLeGrec Messages postés 99 Statut Membre 2
     
    Non ca marche toujours pas !!!
    0
    1. Lumpy-Rock Messages postés 76 Statut Membre 1
       
      Je ne pense pas que c'est ça mais c'est quand même une erreur, enlève les points virgules après les deux While !!

      Tu as toujours la même erreur qu'au début ?

      Et il y a aussi un problème de HTML :
      Remplace
      echo '<span id="titre">'.$menu["LibMenu"]." : ".$menu["PrixMenu"].'</span>';

      par
      echo '<span id="titre">'.$menu["LibMenu"].' : '.$menu["PrixMenu"].'</span>'; 
      0
    2. JésusLeGrec Messages postés 99 Statut Membre 2
       
      Si j'enlève les deux points virgules après les While, rien ne se passe. Il y a toujours les erreurs.
      0
    3. Lumpy-Rock Messages postés 76 Statut Membre 1
       
      Je crois que je sais..

      Essaie comme ça au lieu de ce que je t'ai dit au dessus...
      $menuactuel = $menu["NumMenu"];  
      $SQL_plats = "SELECT * FROM plats WHERE Num_Menu=$menuactuel";


      De toute façon, le problème est forcément dans la requête, l'erreur que tu décris est souvent provoquée par une mauvaise syntaxe..
      0
    4. JésusLeGrec Messages postés 99 Statut Membre 2
       
      Bah non, ça marche pas. Il n'y a que les titres des menus qui apparaissent.
      0
    5. JésusLeGrec Messages postés 99 Statut Membre 2
       
      Mais en fait, quand il y a marqué :
      Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\wamp\www\AP Site\Restaurant.php on line 36

      Ca veut dire qu'il manque un paramètre nom ?? Il sert à quoi ce paramètre ? Est il important ? Ce n'est pas lui qui commence à m'emm***** ???
      0
  4. Bertrand40 Messages postés 1344 Statut Membre 197
     
    Tu peux nous décrire tes tables ?

    Ca devrait donner un truc de ce genre-là.

    <?php
    $cnx = mysql_connect('localhost', 'root','' );
    mysql_query("SET NAMES UTF8");
    mysql_select_db('site');

    $sql = mysql_query (
    'SELECT *
    FROM menus
    LEFT JOIN plats
    WHERE plats.NumMenu = menus.Num_Menu'
    );

    while ($menu = mysql_fetch_assoc($sql))
    {
    echo '
    <p id="titre">' . $menu['LibMenu']. ' : ' . $menu['PrixMenu'] . '</p>
    <p>' . $menu['LibPlat'] . '</p>
    <p><img src="' . $menu['ImgPlat'] . '" alt="' . $menu['LibPlat'] . '" /></p>';
    }
    ?>
    Le jambon de Bayonne c'est bon ! Non, disons que personnellement je trouve ça bon.
    0
    1. JésusLeGrec Messages postés 99 Statut Membre 2
       
      Les structures de mes tables sont les suivantes :

      la table menus :
      NumMenu
      LibMenu
      PrixMenu

      la table plats :
      NumPlat
      LibPlat
      ImgPlat
      #Num_Menu (clé étrangère vers la table menus)


      Et en fait, je veux afficher le titre d'un menu, en dessous les plats qui font partis de ce menu et enfin les images des plats.
      0
    2. JésusLeGrec Messages postés 99 Statut Membre 2
       
      En utilisant ta solution, il n'y a plus qu'une erreur, qui est :
      Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in C:\wamp\www\AP Site\Restaurant.php on line 38

      C'est toujours la même!!!
      Et la ligne 38 c'est :
      while ($menu = mysql_fetch_assoc($sql))
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Eastchild Messages postés 337 Statut Membre 31
     
    Bonjour,

    J'ai pas trop l'habitude du mysql_fetch_assoc mais peux-tu essayer en les remplaçant par mysql_fetch_array et s'il y a toujours une erreur nous la noté ?
    0
    1. JésusLeGrec Messages postés 99 Statut Membre 2
       
      Avec mysql_fetch_array il y a toujour une erreur, qui est :
      Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\wamp\www\AP Site\Restaurant.php on line 36

      Avec ligne 36 :
      while ($plats = mysql_fetch_array($req_plats))

      Apparemment, il manquerait un paramètre. Mais pourquoi faire ?
      0
  7. Utilisateur anonyme
     
    saluuuuuuut à tous,
    Oh! un problème mysqlllllllllll
    vous voulez que je vous aide à le résoudre...... ?
    c'est quoi mysql deja ? :(
    0
  8. Utilisateur anonyme
     
    je vois que personne n'a répondu à ma question, mais justement c'est normal qu'on prenne toujours celui qui pose la question conne comme un con.
    Et bien ma question était de savoir si vous savez que mysql est un langage de programmation, je vois que la plupart des gens ne le savent pas et prenne plutôt php comme le langage et mysql comme une fonction et bien non justement c'est plus que ça.
    j'espère que tu as corrigé tes erreurs syntaxes php comme t'a dit les autres et cette portion de concaténation qui peut aussi s'écrire comme ceci:
    $SQL_plats = "SELECT * FROM plats WHERE Num_Menu='".$menu["NumMenu"]."'";


    et bien sûr c'est justement là le problème pour php le code est bon mais pour mysql il y a un problème se cache dans la clé étrangère
    on prend les plat qui correspondent au menu :
    la clé étrangère étant de relier l'index du menus au plats (NumMenu) aux plats par #Num_Menu (qui montre qu'une catégorie de plat appartient à un menu)
    il faut donc mettre #Num_Menu dans la requête sur le nombre de plats appartenant à un menu (Num_Menu n'est pas une colonne de la table plats mais #Num_Menu)
    soit:
    $SQL_plats = "SELECT * FROM plats WHERE  #Num_Menu='".$menu["Num_Menu"]."'";

    et voilà!
    s'il y a une erreur de concaténation php tu peux le corriger toi même
    attention aux noms donnés aux variables (#Num_Menu ) cela peut entrainer de tels erreurs

    @+

    l'injecteur sql !
    0
  9. JésusLeGrec Messages postés 99 Statut Membre 2
     
    Eh bien mauvaise nouvelle pour toi!!! Rien ne marche avec ce que tu m'as donné.
    J'en ai marre!!! Je vais me pendre!!! lol
    0
    1. Utilisateur anonyme
       
      si tu n'as pas fait en sorte que la clé étrangère relie #Num_Menu et Num_Menu ne sois pas étonné de ce résultat.
      sinon affiche le code sql de ta base de donnée par exportation phpmyadmin et poste le ici si possible
      0
  10. JésusLeGrec Messages postés 99 Statut Membre 2
     
    Voici le code de la BDD

    -- phpMyAdmin SQL Dump
    -- version 3.3.9
    -- https://www.phpmyadmin.net/
    0
    1. Utilisateur anonyme
       
      oui déjà merci pour le #Num_Menu que tu avais mis tout à l'heure qui m'a fait écrire des bêtises lol
      bon voilà on comprend mieux
      oui la requête sql c'est bien ceci
      $SQL_plats = "SELECT * FROM plats WHERE Num_Menu='".$menu["NumMenu"]."'";
      

      le problème est donc autre qu'un problème sql si ceci ne fonctionne pas
      0
    2. JésusLeGrec Messages postés 99 Statut Membre 2
       
      Là, il n'y a plus d'erreur, mais (et oui, désolé, il y a toujours un "mais"), il n'y a plus que les titres de mes menus qui sont affichés... o_0
      0
    3. JésusLeGrec Messages postés 99 Statut Membre 2
       
      Je suis chiant hein ...
      0
    4. Utilisateur anonyme
       
      ça tu l'as dit.......
      retire les point virgules après la boucle while
      0
    5. JésusLeGrec Messages postés 99 Statut Membre 2
       
      Oui je sais on me le fis souvent !!!!

      Bon alors, là c'est de mieux en mieux!!! Il y a des noms de repas qui s'affichent. Pas tous par contre. Et les images non plus ne s'affichent pas...
      0
  11. Utilisateur anonyme
     
    le truc ce serai de récupérer les images dans la deuxième
    boucle et de les traiter(afficher) dans une troisième
    //apres $req_plats = mysql_query($SQL_plats);  
    $i=0; 
    $j=0; 
    $imgPlat=array(); 
    while ($plats = mysql_fetch_assoc($req_plats)); 
    { 
    echo '<br/>'.$plats["LibPlat"]; 
    $imgPlat[$i][0]=$plats["ImgPlat"]; 
    $imgPlat[$i][1]=$plats["LibPlat"]; 
    $i++; 
    }  
    //afichage des images  
    while($j<count($imgPlat)) 
    { 
    echo '<img src="'.$imgPlat[$j][0].'" alt="'.$imgPlat[$j][1].'" title="'.$imgPlat[$j][1].'"/>';  
    $j++;
    } 
    
    

    bon voilà c'est un truc du genre
    0
  12. JésusLeGrec Messages postés 99 Statut Membre 2
     
    Alors, TU ES TROP UN BOSS!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    CA marche!!! YOUPI!!!

    Merci Beaucoup!!! Et encore, ce n'est pas assez!!! Ça fait deux semaines que je cherche la solution et toi tu la trouve en à peine 4 heures!!! Tu es un génie!!!
    0
    1. Utilisateur anonyme
       
      De rien ce fut un plaisir.
      0
    2. JésusLeGrec Messages postés 99 Statut Membre 2
       
      Ça t'a quand même prit la tête hein ?
      0
    3. Utilisateur anonyme
       
      pas vraiment puisque je savais déjà ce tout ce qui pouvais être comme erreur, mais c'est toi qui rendait les choses difficiles ^^
      Tu sais, j'ai beaucoup programmé en php, et beaucoup trop même on va dire. Mais bon ce n'est plus trop mon passe temps. Si tu continues tu arriveras à un stade où tu sera capable de résoudre presque tous les problèmes car tu les auras déjà rencontré.
      ça fait plaisir de refaire ces choses.
      0