Affichage jointure

Résolu
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

  1. Modérateur
    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. 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.
  2. Modérateur
    Bonjour
    Tu ne dois faire qu'une seule requete avec une jointure.
    Regarde comment s'utilise le LEFT JOIN