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. 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.
    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. 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.
      2. 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>"
      3. 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. 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. 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. 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. 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. Ah oui, j'avais pas vu ce détail ^^

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

                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. 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.