Mauvais affichage boucle PHP

Résolu/Fermé
Solar13 Messages postés 204 Date d'inscription lundi 23 mai 2011 Statut Membre Dernière intervention 14 mai 2014 - Modifié par Solar13 le 14/10/2011 à 14:16
Solar13 Messages postés 204 Date d'inscription lundi 23 mai 2011 Statut Membre Dernière intervention 14 mai 2014 - 19 oct. 2011 à 09:27
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 
} 
?> 

A voir également:

10 réponses

jojo673 Messages postés 210 Date d'inscription lundi 19 septembre 2011 Statut Membre Dernière intervention 9 avril 2014 44
14 oct. 2011 à 14:17
Enlève cette ligne :
//affichage des données: 
$result = mysql_fetch_array($requete); 
0
Skeletyon Messages postés 1552 Date d'inscription jeudi 20 novembre 2008 Statut Membre Dernière intervention 30 décembre 2013 156
14 oct. 2011 à 14:21
Bonjour.

Ici vous affichez tous les nom_categorie et nom_produit de vos 2 tables.
Que voulez-vous faire?
0
Solar13 Messages postés 204 Date d'inscription lundi 23 mai 2011 Statut Membre Dernière intervention 14 mai 2014
14 oct. 2011 à 14:25
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
Solar13 Messages postés 204 Date d'inscription lundi 23 mai 2011 Statut Membre Dernière intervention 14 mai 2014
14 oct. 2011 à 16:44
C'est possible ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
maka54 Messages postés 699 Date d'inscription mercredi 8 avril 2009 Statut Membre Dernière intervention 4 décembre 2016 80
15 oct. 2011 à 11:08
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
Solar13 Messages postés 204 Date d'inscription lundi 23 mai 2011 Statut Membre Dernière intervention 14 mai 2014
15 oct. 2011 à 20:25
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
graffx Messages postés 6506 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 24 mars 2019 1 973
16 oct. 2011 à 01:19
Sinon pour eviter les doublons (ce n' est pas la solution la plus propre), la fonction DISTINCT dans a requete.
0
Solar13 Messages postés 204 Date d'inscription lundi 23 mai 2011 Statut Membre Dernière intervention 14 mai 2014
16 oct. 2011 à 07:48
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
maka54 Messages postés 699 Date d'inscription mercredi 8 avril 2009 Statut Membre Dernière intervention 4 décembre 2016 80
17 oct. 2011 à 07:56
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
Solar13 Messages postés 204 Date d'inscription lundi 23 mai 2011 Statut Membre Dernière intervention 14 mai 2014
19 oct. 2011 à 09:27
Impeccable !

Merci encore !
0