Affichage jointure

Résolu
cindydep -  
 cindydep -
Bonjour,

Je suis débutante en php et sql et mon problème est le suivant :

Pour un projet scolaire je réalise un site pour trouver des chiens de races à accoupler. J'ai une table race comportant le nom de la race et son id et une table annonce avec l'id race et les autres informations de l'annonce. J'aimerais qu'en affichant l'annonce, la race du chien s'affiche. Aucune erreur n'est affiché, l'annonce s'affiche entièrement sauf la race justement qui reste vide. Je vous met ci-dessous mon code.

<?php  
   
    
$connexion=mysqli_connect("localhost","root","");
mysqli_select_db($connexion,"hotdog");
$req = 'SELECT * FROM annonce';
$res = mysqli_query($connexion,$req);
while($enregistrement = mysqli_fetch_array($res)) {
$nom = $enregistrement['nom'];
$mail_post = $enregistrement['mail_post'];
$sexe = $enregistrement['sexe'];
$age = $enregistrement['age'];
$prix = $enregistrement['prix'];
$ville = $enregistrement['ville'];


$req2 = 'SELECT nom_race FROM annonce, race WHERE 
race.nom_race = annonce.id_race'; 
$res2 = mysqli_query($connexion, $req2);
$data = mysqli_fetch_array($res2);

echo  '  <article class="post">   Nom du chien : '.$nom.' adresse email : '.$mail_post.' sexe : '.$sexe.' age : '.$sexe.' prix : '.$prix.' race : ' .$data['nom_race'].' ville : '.$ville.' .   </article>' ;

 }
mysqli_close($connexion);


?>


EDIT : AJout des balises de code

J'ai beau chercher et essayer plusieurs techniques, rien n'y fait…
Merci par avance !!

Configuration: Windows / Edge 17.17134

2 réponses

jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Bonjour,

Je t'invite à t'inspirer de ceci pour tes prochains codes :
https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code


Je pense aussi que le champ utilisé dans ta requête pour faire le lien entre les deux tables n'est pas le bon...
race.nom_race = annonce.id_race

Je pense que tu dois utiliser un champ "race.id" (sinon quel intéret de faire une jointure si tu as déjà le "nom de la race" dans "annonce.id_race"' )

Bref, ton code revu et corrigé...
<?php  
//------------------------------------------------------------------------//
// Affichage des erreurs PHP:
//------------------------------------------------------------------------//
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);


//------------------------------------------------------------------------//
//connexion à la bdd et gestion des éventuelles erreurs de connexion
//------------------------------------------------------------------------//
 $con=mysqli_connect("localhost","root","","hotdog");
 if (!$con){
   die("Connection error: " . mysqli_connect_errno());
 }
   
//------------------------------------------------------------------------//
// récupération des annonces
//------------------------------------------------------------------------//   
   
  $sql = "SELECT A.*
                ,R.*
		FROM annonce A
		LEFT JOIN race R ON R.id = A.id_race ";

  $res = mysqli_query($connexion,$sql);
  if (!$res) {
	  echo("Error description: " . mysqli_error($connexion));
  }else{

	  while($enregistrement = mysqli_fetch_array($res)) {
			$nom = $enregistrement['nom'];
			$mail_post = $enregistrement['mail_post'];
			$sexe = $enregistrement['sexe'];
			$age = $enregistrement['age'];
			$prix = $enregistrement['prix'];
			$ville = $enregistrement['ville'];
			$nom_race = $enregistrement['nom_race']

			echo  '<article class="post"> 
					Nom du chien : '.$nom.' adresse email : '.$mail_post.' sexe : '.$sexe.' age : '.$sexe.' prix : '.$prix.' race : ' .$nom_race.' ville : '.$ville.'
				  </article>' ;
		}
	}
mysqli_close($connexion);


?>

1
cindydep
 
Bonjour,
Merci beaucoup. Je n'avais pas réussi à utiliser correctement le LEFT JOIN jusque là. Tout fonctionne très bien.
Bonne journée à vous.
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Bonjour
Tu ne dois faire qu'une seule requete avec une jointure.
Regarde comment s'utilise le LEFT JOIN
0