Mauvais affichage boucle PHP

Résolu
Solar13 Messages postés 214 Statut Membre -  
Solar13 Messages postés 214 Statut Membre -
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. jojo673 Messages postés 235 Statut Membre 44
     
    Enlève cette ligne :
    //affichage des données: 
    $result = mysql_fetch_array($requete); 
    0
  2. Skeletyon Messages postés 1622 Date d'inscription   Statut Membre Dernière intervention   157
     
    Bonjour.

    Ici vous affichez tous les nom_categorie et nom_produit de vos 2 tables.
    Que voulez-vous faire?
    0
  3. Solar13 Messages postés 214 Statut Membre
     
    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 ).
    0
  4. Solar13 Messages postés 214 Statut Membre
     
    C'est possible ?
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. maka54 Messages postés 721 Statut Membre 80
     
    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
    0
  7. Solar13 Messages postés 214 Statut Membre
     
    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.
    0
  8. graffx Messages postés 120 Date d'inscription   Statut Contributeur Dernière intervention   2 031
     
    Sinon pour eviter les doublons (ce n' est pas la solution la plus propre), la fonction DISTINCT dans a requete.
    0
  9. Solar13 Messages postés 214 Statut Membre
     
    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.
    0
  10. maka54 Messages postés 721 Statut Membre 80
     
    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
    0
  11. Solar13 Messages postés 214 Statut Membre
     
    Impeccable !

    Merci encore !
    0