Joindre une table 'article' avec mutiple photo d'une autre table nommee 'image'

Résolu
ir_1997 Messages postés 102 Statut Membre -  
ir_1997 Messages postés 102 Statut Membre -
salut tous le monde
enfaite j'ai join deux tables dont articles et images puis une colonne 'idarticle' dans la table images qui comporte l'id des article le truc et que j aimerai afficher chaque article avec ces images
mais la sa me sa m'affiche qu'un seul article et une seule photo
les autres ne s'affiches pas carement

<?php  
$bdd = new PDO("mysql:host=127.0.0.1;dbname=espace_membre;charset=utf8", "root", "");
 $requser = $bdd->prepare('SELECT articles.article,images.image,articles.description,articles.prix,articles.contacte FROM articles join images on  images.idarticle =  articles.id 
');
   $requser->execute(array());
   $resultat = $requser->fetch();

{?>

  
	<table>
    <?php?>
	<tr>
 <ul>
  <h3><td> <?php echo $resultat ['article' ]."</br>";?><td></h3>
  <td> <img src="<?php echo $resultat ['image']?>" weight = 100 height = 100>  </td>
  <td> <?php echo $resultat ['description']."</br>";?></td>
  <td> <?php echo $resultat ['prix']."</br>";?></td>
  <td> <?php echo $resultat ['contacte']."</br>"; ?></td>
  
  </ul>
  
  
   </tr>
   <?php
	}?>

8 réponses

  1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
     
    Bonjour

    Déjà es tu sur sqlserver (choix de ton forum....) Ou, comme je le pense... MySQL ?

    Edit: vu la chaîne de connexion.. c'est MySQL..
    Je déplace donc dans le bon forum

    Ensuite... Je pense qu'il suffit d'inverser ton from et ton join

    FROM images join articles



    0
  2. ir_1997 Messages postés 102 Statut Membre
     
    Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1066 Not unique table/alias: 'articles' in C:\xampp\htdocs\Electronique.php:20 Stack trace: #0 C:\xampp\htdocs\Electronique.php(20): PDO->query('SELECT * FROM i...') #1 {main} thrown in C:\xampp\htdocs\Electronique.php on line 20

    <?php try{
    $bdd =new PDO('mysql:host=localhost;
     dbname=espace_membre; charset=utf8', 'root', '');
    // Activation des erreurs PDO
     $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH
     $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
    } catch(PDOException $e) {
        die('Erreur : ' . $e->getMessage());
    }
    ?>
    <!DOCTYPE html>
    <html>
    <head>
    	<title>electronique</title>
    </head>
    <body>
    		<?php  
    
    $requete = $bdd->query( "SELECT * FROM images articles join articles where articles.idarticle  = images.id   " );
    
      while($resultat =$requete->fetchALL())
    
    {?>
    	  <table>
      <tr>
     <ul>
      <td><?php echo $resultat ['article']?>"</br>"; <td>
      <td><img src="<?php echo $resultat ['image']?>" weight = 100 height = 100>
      <td> <?php echo $resultat ['description']?>"</br>";</td>
      <td> <?php echo $resultat ['prix']."</br>";?></td>
      <td> <?php echo $resultat ['contacte']."</br>"; ?></td>
      <td> <?php echo $resultat ['date_time_publication']."</br>"; ?></td>
     <td> </td>
    <a href = "articles.php?idarticle=<?php echo $resultat ['idarticle'];?> "> plus </a>
      "</ul>
       
       </tr>
       <?php
    	}?>
    
    
    </body>
    </html>
    
    
    0
    1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
       
      Relis ta requête il semble qu'elle soit totalement fausse...
      0
      1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832 > jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention  
         
        $requete = $bdd->query( "SELECT *
         FROM images  
        Join articles 
        where articles.idarticle  = images.id   " );
        
        

        par contre es-tu sûr que les id que tu indiques dans ton where sont bien les bons ça me paraît étrange.
        J'aurais plutôt utilisé idarticle sur la table images et le chant id sur la table articles...
        0
  3. ir_1997 Messages postés 102 Statut Membre
     
    justement id c'est pour la table articles
    et idarticle pour la table images

    Fatal error: Uncaught PDOException: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'articles.idarticle' in 'where clause' in C:\xampp\htdocs\Electronique.php:20 Stack trace: #0 C:\xampp\htdocs\Electronique.php(20): PDO->query('SELECT *\r\n FROM...') #1 {main} thrown in C:\xampp\htdocs\Electronique.php on line 20

    mais le problème persiste

    <?php try{
    $bdd =new PDO('mysql:host=localhost;
     dbname=espace_membre; charset=utf8', 'root', '');
    // Activation des erreurs PDO
     $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH
     $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
    } catch(PDOException $e) {
        die('Erreur : ' . $e->getMessage());
    }
    ?>
    <!DOCTYPE html>
    <html>
    <head>
    	<title>electronique</title>
    </head>
    <body>
    		<?php  
    
    $requete = $bdd->query( "SELECT *
     FROM images  
    Join articles 
    where articles.idarticle  = images.id " );
    
      while($resultat =$requete->fetchALL())
    
    {?>
    	  <table>
      <tr>
     <ul>
      <td><?php echo $resultat ['article']?>"</br>"; <td>
      <td><img src="<?php echo $resultat ['image']?>" weight = 100 height = 100>
      <td> <?php echo $resultat ['description']?>"</br>";</td>
      <td> <?php echo $resultat ['prix']."</br>";?></td>
      <td> <?php echo $resultat ['contacte']."</br>"; ?></td>
      <td> <?php echo $resultat ['date_time_publication']."</br>"; ?></td>
     <td> </td>
    <a href = "articles.php?idarticle=<?php echo $resultat ['idarticle'];?> "> plus </a>
      "</ul>
       
       </tr>
       <?php
    	}?>
    
    
    </body>
    </html>
    
    
    0
    1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
       
      Non seulement tu ne sais pas lire le contenu du message d'erreur... qui est pourtant ultra clair ...
      mais en plus tu ne lis pas les réponses qu'on te donne :!!!!
      $requete = $bdd->query( "SELECT *
       FROM images  
      Join articles 
      where articles.idarticle  = images.id " );
      

      A remplacer par
      $requete = $bdd->query( "SELECT *
       FROM images  
      Join articles 
      where images .idarticle  = articles.id " );
      


      ensuite, soit tu fais un while .. soit un fetchAll ...

      Donc cette ligne
        while($resultat =$requete->fetchALL())
      

      est à changer par
        while($resultat =$requete->fetch())
      

      ou par
       $res =$requete->fetchAll();
       foreach( $res as  $resultat )
      
      0
  4. ir_1997 Messages postés 102 Statut Membre
     
    les articles s'affichent normalement mais mais sans les images
    0
    1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
       
      As tu testé la requête DIRECTEMENT dans ta bdd via phpmyadmin ?
      Qu'est ce qu'elle te donne ? Fais nous une capture d'écran
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. ir_1997 Messages postés 102 Statut Membre
     
    sa select les images

    0
  7. Reivax962 Messages postés 3742 Statut Membre 1 011
     
    Bonjour,

    Ton tag HTML pour afficher les images est mal écrit.
    Remplace
    <td><img src="<?php echo $resultat ['image']?>" weight = 100 height = 100>

    par
    <td><img src="<?php echo $resultat['image']?>" width="100" height="100"></td>


    Par ailleurs, tu fais une boucle sur tous les résultats, mais il faut garder en tête que tu auras des doublons de lignes article sur ceux qui ont plusieurs images. Si ce n'est pas ce que tu veux, il faudra réfléchir à comment tu veux afficher ces images multiples.

    Xavier

    (PS accessoirement, intervertir le FROM et le INNER JOIN (idem avec FULL OUTER JOIN) n'a aucun effet autre que modifier l'ordre de sortie des colonnes avec *)
    0
  8. ir_1997 Messages postés 102 Statut Membre
     
    d'accord je viens d'appliquer tes consigne
    les images s'affichent

    mais pour éviter les double article sur pour les images
    ya aucun moyen?

    $requete = $bdd->query( "SELECT *
     FROM articles
      Join  images
    where images.idarticle =  articles.id " );
    0
    1. Reivax962 Messages postés 3742 Statut Membre 1 011
       
      Si mais comme je l'ai dit, ça dépendra de comment tu veux gérer l'affichage de plusieurs images pour un seul article.
      0
  9. ir_1997 Messages postés 102 Statut Membre
     
    non j'aimerais plutôt chaque articles avec ces images
    0
    1. Reivax962 Messages postés 3742 Statut Membre 1 011
       
      Oui ça j'ai bien compris, mais tu ne réponds pas à la question : disposées comment ?
      Voici un exemple qui les place côte-à-côte :
      <?php try{
          $bdd =new PDO('mysql:host=localhost;
          dbname=espace_membre; charset=utf8', 'root', '');
          // Activation des erreurs PDO
          $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
          // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH
          $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
      } catch(PDOException $e) {
          die('Erreur : ' . $e->getMessage());
      }
      ?>
      <!DOCTYPE html>
      <html>
          <head>
              <title>electronique</title>
          </head>
          <body>
      <?php  
      $requete = $bdd->query( "SELECT *
          FROM images  
          JOIN articles 
          WHERE articles.id  = images.idarticle " );
      
      ?>
              <table>
      <?php
      $previousId = -1;
      while($resultat = $requete->fetchALL()) {
          $id = $resultat['id'];
          $newRow = $previousId > -1 && $previousId != $id;
          if ($newRow) {
              if ($previousId > -1) {?>
                      </td>
                      <td><?php echo $previous['description']?></td>
                      <td><?php echo $previous['prix']?></td>
                      <td><?php echo $previous['contacte']?></td>
                      <td><?php echo $previous['date_time_publication']?></td>
                      <td><a href="articles.php?idarticle=<?php echo $previousId ?>">plus</a></td>
                  </tr>
      <?php
              }
              $previousId = $id;
              $previous = $resultat;
      ?>
                  <tr>
                      <td><?php echo $resultat['article']?></td>
                      <td>
      <?php
          }?>
                          <img src="<?php echo $resultat['image']?>" width="100" height="100">
      <?php
      }
      if ($previousId > -1) {?>
                      </td>
                      <td><?php echo $previous['description']?></td>
                      <td><?php echo $previous['prix']?></td>
                      <td><?php echo $previous['contacte']?></td>
                      <td><?php echo $previous['date_time_publication']?></td>
                      <td><a href="articles.php?idarticle=<?php echo $previousId ?>">plus</a></td>
                  </tr>
      <?php
      }?>
              </table>
          </body>
      </html>
      

      Le principe étant de détecter qu'on change d'article, pour n'écrire les données hors photos, et le <tr>, qu'une seule fois par article. Ce qui implique de garder en mémoire la ligne précédente pour pouvoir la clore quand on a détecté un changement d'article.

      Xavier
      0
      1. ir_1997 Messages postés 102 Statut Membre > Reivax962 Messages postés 3742 Statut Membre
         
        bien merci beaucoup je viens d'arranger
        0