Mauvais affichage boucle PHP

Résolu
Bonjour,

J'ai un affichage php qui affiche plusieurs fois les mêmes champs de mes tables et je ne comprend pas pourquoi.
Pouvez vous me donner un coup de main ?


<?php require("admin/connexion/localhost.php"); 
  
$conn = mysql_connect($hostname_localhost, $username_localhost, $password_localhost) or trigger_error(mysql_error(),E_USER_ERROR); 
  
mysql_query("SET CHARACTER SET 'utf8';")or die(mysql_error());  
  
mysql_select_db($database_localhost, $conn);  


 //requête SQL: 
$sql = "SELECT * 
        FROM categories, produits"; 
  
//exécution de la requête: 
$requete = mysql_query($sql) or die( mysql_error()); 

 //affichage des données: 
$result = mysql_fetch_array($requete); 

while($result = mysql_fetch_array($requete)) 

{?> 

<?php echo nl2br($result['nom_categorie']); ?> 

<?php echo nl2br($result['nom_produit']); ?> 

<?php 
} 
?> 

10 réponses

  1. si tu veux tous afficher meme si un produit n'a pas de categorie, ou inversement

    la requete sera comme çà :

    SELECT *
     FROM produits
     LEFT JOIN categories ON produits.ID_produit = categories.ID_categorie


    c'est LEFT, le mot souligne que j'ai remplacé par INNER
    1. Merci beaucoup pour la réponse,

      C'est bon je n'ai plus de doublons, mais par contre il ne m'affiche que la dernière entrée des catégories, la 3.
      1. Contributeur
        Sinon pour eviter les doublons (ce n' est pas la solution la plus propre), la fonction DISTINCT dans a requete.
        1. Merci pour la réponse.

          J'ai fait la requête suivente:

          "SELECT *
           FROM produits
           INNER JOIN categories ON produits.ID_produit = categories.ID_categorie";
          


          Mais je n'ai qu'une seule entrée ( la dernière ) de ma table catégorie qui s'affiche, mais avec les bons produits correspondant.

          En gros j'ai ça:

          Catégorie3
          Poduit1
          Produit2
          Produit3

          Il m'occulte la catégorie 1 et 2.
          1. bonjour,

            tes résultats sont en double et c'est normal

            exemple :

            SELECT * FROM table"; 


            ce code affichera une seule fois les enregistrements

            si maintenant tu met 2 noms de table

            SELECT * FROM categories, produits 


            ce code va afficher tous les enregistrements des 2 tables 2 fois

            (autant de fois que de le nombre de table)

            il faut en fait lié les deux tables :

            SELECT * 
            FROM produits 
            INNER JOIN categories ON produits .IdCategorie = categorie.id
            


            la requete ressemblera a un truc comme çà
            en remplacant les noms des champs souligné par tes champs correspondants
            1. Merci pour vos réponses, désolé cela n'a pas marché.

              En fait, mon but final, serait d'afficher une sorte de liste, avec comme titre la catégorie et en dessous les produits associés ( mes deux tables sont liés par l'ID ).
              1. Bonjour.

                Ici vous affichez tous les nom_categorie et nom_produit de vos 2 tables.
                Que voulez-vous faire?
                1. Enlève cette ligne :
                  //affichage des données: 
                  $result = mysql_fetch_array($requete);