Problème de variable en pdo

Résolu
Bonjour,

j'ai un problème au niveau de ce bout de code
for ($i=0; $i<$nbpics; $i++){
	

	$img2=$detail;
	$img3=$tableau[$i];
	
	$echo_reponses ='<span>'.$img2.'</</span><span>'.$img3.'</span>';
	
	
$req='select NomArticle FROM article WHERE Image= :echo_reponses';
$requete2 = $bdd->prepare($req);
$requete2->bindValue(':echo_reponses',$echo_reponses);
$requete2->execute();
	 $image2 = $requete2->fetch();
	$detail2 = $requete2->fetchColumn();
    $requete->closeCursor();
	$requete2->execute();
	
	// pour chaque miniature, on affiche la miniature munie d'un lien vers la photo en taille réelle
	
	echo ' <td><a    href="TESTT.PHP?&ctrligne='.$detail.'/' , $tableau[$i] , '"  ><img src="'.$detail.'/' , $tableau[$i] , '" width="200" height="200" id="chemin" name="chemin"  onchange="javascript:adresse();"  alt="Image" /></BR></BR><CENTER> a['.$i.']='.$detail2.'</a></CENTER></BR></BR></td>';
	


la galerie d'images s'affiche avec en dessous de chaque image a[1]= POUR LA PREMIERE ET a[2]= POUR LA DEUXIEME AINSI DE SUITE MAIS LE R2SULTAT '.$detail2.' ne s'affiche pas.

merci d'avance

13 réponses

  1. C'est bien ce que je pensais.

    Dans ton code PHP tu déclares ta variable :

    $echo_reponses ='<span>'.$img2.'</span><span>/</span><span>'.$img3.'</span>'


    Ensuite ta requête SQL :

    $req="select NomArticle FROM Article WHERE Image='.$echo_reponses.'"; 


    Donc la même chose que

    $req="select NomArticle FROM Article WHERE Image='<span>'.$img2.'</span><span>/</span><span>'.$img3.'</span>'; 


    (Grossièrement hein, juste pour que tu comprennes)

    Or ton champ Image contient juste "image\A.jpg", donc il ne trouvera jamais "<span>'.$img2.'</span><span>/</span><span>'.$img3.'</span>". Tu dois donc délcarer la valeur de $echo_reponses par le texte contenu dans le champ Image.
    1. Bonjour,

      Tu as des , à la place de . pour faire le lien entre des variables PHP et un echo de code HTML. Essayes avec ça:

      echo '<td><a href="TESTT.PHP?&ctrligne='.$detail.'/'.$tableau[$i].'">
      <img src="'.$detail.'/'.$tableau[$i].'" width="200" height="200" id="chemin" name="chemin"  onchange="javascript:adresse();"  alt="Image" />
      </BR></BR><CENTER> a['.$i.']='.$detail2.'</a></CENTER></BR></BR></td>'; 


      Par contre tu as quelques maladresses dans ton code HTML, je te recommande une validation W3C ou au moins l'affichage du code source avec Firefox qui te donnera quelques conseils.
      1. Bonjour,

        Merci d'avoir répondu à ma question.
        Je viens de tester avec ton code mais j'ai le même résultat.
        c'est vrai que le code n'est pas propre mais lorsque je mets le nom de l'image directement à la place de la variable
        	
        $req='select NomArticle FROM article WHERE Image= 'images/AA.jpg';
        $requete2 = $bdd->prepare($req);
        ;
        
        	 $image2 = $requete2->fetch();
        	$detail2 = $requete2->fetchColumn();
            $requete->closeCursor();
        	$requete2->execute();
        	

        ça marche avec le nom mais en mettant la variable $echo_reponses non
        1. Ton "images/AA.jpg" il vient d'où ?
      2. Ah oui, j'avais pas vu ce détail ^^

        $req="select NomArticle FROM article WHERE Image='".$echo_reponses."'"; 

        1. j'ai déja testé cela
          Malheureusement ça marche tjrs pas.
          je crois la syntaxe en pdo ne supporte pas ce genre de variable?????
          je suis vraiment bloquée
          1. en fait 'images/AA.jpg' est une image dans un dossier depuis lequel j'affiche ma galerie.moi je veux que les images de la galerie s'affichent avec le nom de l'article correspondant en dessous.

            $echo_reponses ='<span>'.$img2.'</</span><span>'.$img3.'</span>';
            si i= 1 ON AURA $echo_reponse='images/AA.jpg'
            si i=2 ON AURA LA DEUXIÈME IMAGE ET AINSI DE SUITE
            1. Je comprend pas tout.

              Il y a quoi dans ta table article ? Comment fais-tu le lien entre l'image et son chemin physique sur le serveur ?
              1. Dans ma table article j'ai les champs :( IdArticle, NomArticle, Prix, libelle, Image, IdFournisseur(foreigne key), galerie)

                je vous explique:

                galerie (varchar) c'est le nom de dossier qui contient les images dont l'image de l' article.

                Image 'varchar): est le chemin de l'image de l'article désigné.exemple (images/burger.jpg).
                1. je vous donne le code entier pour bien comprendre
                  
                  <script language="javascript"> 
                  
                  function adresse() 
                  { 
                  
                  var path=document.getElementById("chemin").value; 
                  return path; 
                  }; 
                   
                  </script> 
                   
                  
                  <?php
                   
                  define("SERVEURBD","127.0.0.1");
                  define("LOGIN","root");
                  define("MOTDEPASSE","");
                  define("NOMDELABASE","food");
                   
                  function connexionBD() {
                      try {
                   
                        $bdd = new PDO('mysql:host=' . SERVEURBD . ';dbname=' . NOMDELABASE, LOGIN, MOTDEPASSE);
                  	  
                      } catch(PDOException $e) {
                    throw new Exception('Pb connexion serveur BD : ' . $e->getMessage());
                  }
                  	
                      return $bdd;
                  }
                   
                  function listerReference() {
                      $bdd = connexionBD();
                      $requete = $bdd->query("select IdFournisseur,Nom from Fournisseur ;");
                   
                      echo "<option value=\"-1\">Choisissez un fournisseur</option>";
                      while ($tab = $requete->fetch()) {
                          echo "<option value=\"".$tab['IdFournisseur']."\">".utf8_encode($tab['Nom'])."</option>\n";
                      }   
                      $requete->closeCursor();
                  }
                   
                  function getDescriptionJson($id){
                      $bdd=  connexionBD();
                      $requete = $bdd->prepare("select galerie from article where IdFournisseur = :idV ;");
                  	
                  	$image = $requete->fetch();
                   
                  
                      $requete->bindParam(":idV", $id);
                      $requete->execute() or die(print_r($requete->errorInfo()));
                      $detail = $requete->fetchColumn();
                      $requete->closeCursor();
                  	
                  	
                  	// on déclare un tableau qui contiendra le nom des fichiers de nos miniatures
                  $tableau = array();
                  // on ouvre notre dossier contenant les miniatures
                  $dossier = opendir ('./'.$detail.'/');
                  while ($fichier = readdir ($dossier)) {
                  	if ($fichier != '.' && $fichier != '..' && $fichier != 'index.php') {
                  	// on stocke le nom des fichiers des miniatures dans un tableau
                  	$tableau[] = $fichier;
                  	}
                  }
                  closedir ($dossier);
                  
                  // on défini le nombre de colonne sur lesquelles vont s'afficher nos miniatures
                  $nbcol=4;
                  // on compte le nombre de miniatures
                  $nbpics = count($tableau);
                  
                  // si on a au moins une miniature, on les affiche toutes
                  if ($nbpics != 0) {
                  	echo '<table>';
                  	for ($i=0; $i<$nbpics; $i++){
                  	
                  
                  	$img2=$detail;
                  	$img3=$tableau[$i];
                  	
                  	$echo_reponses ='<span>'.$img2.'</</span><span>'.$img3.'</span>';
                  	
                  	
                  $req="select NomArticle FROM Article WHERE Image='".$echo_reponses."'"; 
                  $requete2 = $bdd->prepare($req);
                  
                  
                  	 $image2 = $requete2->fetch();
                  	$detail2 = $requete2->fetchColumn();
                      $requete->closeCursor();
                  	$requete2->execute();
                  	
                  	// pour chaque miniature, on affiche la miniature munie d'un lien vers la photo en taille réelle
                  	echo '<td><a href="TESTT.PHP?&ctrligne='.$detail.'/'.$tableau[$i].'">
                  <img src="'.$detail.'/'.$tableau[$i].'" width="200" height="200" id="chemin" name="chemin"  onchange="javascript:adresse();"  alt="Image" />
                  </BR></BR><CENTER> a['.$i.']='.$detail2.'</a></CENTER></BR></BR></td>'; 
                  
                  	if($i%$nbcol==($nbcol-1)) echo '</tr>';
                  	
                  
                  	}
                  	echo '</table>';
                  	
                  
                  }
                  // si on a aucune miniature, on affiche un petit message :)
                  else echo 'Aucune image à afficher';
                  	
                  }
                  
                  
              2. Ta requête SQL recherche Image = <span>'.$img2.'</</span><span>'.$img3.'</span> (d'ailleurs tu as un "</" en trop) ce n'est pas logique si c'est le chemin du fichier qui est stocké dans ce champ.
                1. bonne remarque merci.je viens de rectifié mais c'est pareil.

                  oui c'est le chemin de l'image qui est stocké
                  
                  <script language="javascript"> 
                  
                  function adresse() 
                  { 
                  
                  var path=document.getElementById("chemin").value; 
                  return path; 
                  }; 
                   
                  </script> 
                   
                  
                  <?php
                   
                  define("SERVEURBD","127.0.0.1");
                  define("LOGIN","root");
                  define("MOTDEPASSE","");
                  define("NOMDELABASE","food");
                   
                  function connexionBD() {
                      try {
                   
                        $bdd = new PDO('mysql:host=' . SERVEURBD . ';dbname=' . NOMDELABASE, LOGIN, MOTDEPASSE);
                  	  
                      } catch(PDOException $e) {
                    throw new Exception('Pb connexion serveur BD : ' . $e->getMessage());
                  }
                  	
                      return $bdd;
                  }
                   
                  function listerReference() {
                      $bdd = connexionBD();
                      $requete = $bdd->query("select IdFournisseur,Nom from Fournisseur ;");
                   
                      echo "<option value=\"-1\">Choisissez un fournisseur</option>";
                      while ($tab = $requete->fetch()) {
                          echo "<option value=\"".$tab['IdFournisseur']."\">".utf8_encode($tab['Nom'])."</option>\n";
                      }   
                      $requete->closeCursor();
                  }
                   
                  function getDescriptionJson($id){
                      $bdd=  connexionBD();
                      $requete = $bdd->prepare("select galerie from article where IdFournisseur = :idV ;");
                  	
                  	$image = $requete->fetch();
                   
                  
                      $requete->bindParam(":idV", $id);
                      $requete->execute() or die(print_r($requete->errorInfo()));
                      $detail = $requete->fetchColumn();
                      $requete->closeCursor();
                  	
                  	
                  	// on déclare un tableau qui contiendra le nom des fichiers de nos miniatures
                  $tableau = array();
                  // on ouvre notre dossier contenant les miniatures
                  $dossier = opendir ('./'.$detail.'/');
                  while ($fichier = readdir ($dossier)) {
                  	if ($fichier != '.' && $fichier != '..' && $fichier != 'index.php') {
                  	// on stocke le nom des fichiers des miniatures dans un tableau
                  	$tableau[] = $fichier;
                  	}
                  }
                  closedir ($dossier);
                  
                  // on défini le nombre de colonne sur lesquelles vont s'afficher nos miniatures
                  $nbcol=4;
                  // on compte le nombre de miniatures
                  $nbpics = count($tableau);
                  
                  // si on a au moins une miniature, on les affiche toutes
                  if ($nbpics != 0) {
                  	echo '<table>';
                  	for ($i=0; $i<$nbpics; $i++){
                  	
                  
                  	$img2=$detail;
                  	$img3=$tableau[$i];
                  	
                  	$echo_reponses ='<span>'.$img2.'</span><span>/</span><span>'.$img3.'</span>';
                  	
                  	
                  $req="select NomArticle FROM Article WHERE Image='.$echo_reponses.'"; 
                  $requete2 = $bdd->prepare($req);
                  
                  
                  	 $image2 = $requete2->fetch();
                  	$detail2 = $requete2->fetchColumn();
                      $requete->closeCursor();
                  	$requete2->execute();
                  	
                  	// pour chaque miniature, on affiche la miniature munie d'un lien vers la photo en taille réelle
                  	echo '<td><a href="TESTT.PHP?&ctrligne='.$detail.'/'.$tableau[$i].'">
                  <img src="'.$detail.'/'.$tableau[$i].'" width="200" height="200" id="chemin" name="chemin"  onchange="javascript:adresse();"  alt="Image" />
                  </BR></BR><CENTER> a['.$i.']='.$detail2.'</a></CENTER></BR></BR></td>'; 
                  
                  	if($i%$nbcol==($nbcol-1)) echo '</tr>';
                  	
                  
                  	}
                  	echo '</table>';
                  	
                  
                  }
                  // si on a aucune miniature, on affiche un petit message :)
                  else echo 'Aucune image à afficher';
                  	
                  }
                  
                  
                  1. Es-tu sur que le contenu de ton champ Image ressemble à ça ? "<span>'.$img2.'</span><span>/</span>"
                2. merci sipherion de m'avoir répondu
                  Oui.lorsque je fais echo 'Image = '.$echo_reponses.'';
                  avec $echo_reponses ='<span>'.$img2.'</span><span>/</span><span>'.$img3.'</span>';

                  et
                  $img2=$detail;
                  $img3=$tableau[$i];

                  ça donne bien le chemin de l'image
                  1. Peux tu me donner le contenu actuel de ta table Article ? En enlevant si nécessaire des données confidentielles.
                3. Merci infiniment sipherion.C'était ça le problème.J'ai ajouté une requête pour avoir le texte contenu dans le champ Image et ça a marché.

                  $bdd= connexionBD();
                  $requete0 = $bdd->prepare("select Image from article where Image='".$detail.'/'.$tableau[$i]."' ;");

                  $image0 = $requete0->fetch();

                  $requete0->bindParam(":idV", $echo_reponses1);
                  $requete0->execute() or die(print_r($requete0->errorInfo()));
                  $detail0 = $requete0->fetchColumn();
                  $requete0->closeCursor();

                  $bdd= connexionBD();
                  $requete2 = $bdd->prepare("select NomArticle from article where Image = :idV ;");

                  $image2 = $requete2->fetch();

                  $requete2->bindParam(":idV", $detail0);
                  $requete2->execute() or die(print_r($requete2->errorInfo()));
                  $detail2 = $requete2->fetchColumn();
                  $requete2->closeCursor();

                  // pour chaque miniature, on affiche la miniature munie d'un lien vers la photo en taille réelle
                  echo '<td><a href="TESTT.PHP?&ctrligne='.$detail.'/'.$tableau[$i].'">
                  <img src="'.$detail.'/'.$tableau[$i].'" width="200" height="200" id="chemin" name="chemin" onchange="javascript:adresse();" alt="Image" />
                  </BR></BR><CENTER>'.$detail2.'</a></CENTER></BR></BR></td>';

                  merci encore pour le temps que t'as consacré pour résoudre mon problème.