Problème de variable en pdo

Résolu/Fermé
solara198 Messages postés 14 Date d'inscription lundi 18 janvier 2016 Statut Membre Dernière intervention 21 mars 2018 - 18 janv. 2016 à 14:50
solara198 Messages postés 14 Date d'inscription lundi 18 janvier 2016 Statut Membre Dernière intervention 21 mars 2018 - 21 janv. 2016 à 21:05
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

sipherion Messages postés 1809 Date d'inscription lundi 22 octobre 2007 Statut Membre Dernière intervention 19 décembre 2016 285
21 janv. 2016 à 11:24
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
sipherion Messages postés 1809 Date d'inscription lundi 22 octobre 2007 Statut Membre Dernière intervention 19 décembre 2016 285
18 janv. 2016 à 15:37
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.
0
solara198 Messages postés 14 Date d'inscription lundi 18 janvier 2016 Statut Membre Dernière intervention 21 mars 2018
18 janv. 2016 à 15:47
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
0
sipherion Messages postés 1809 Date d'inscription lundi 22 octobre 2007 Statut Membre Dernière intervention 19 décembre 2016 285
18 janv. 2016 à 16:07
Ton "images/AA.jpg" il vient d'où ?
0
sipherion Messages postés 1809 Date d'inscription lundi 22 octobre 2007 Statut Membre Dernière intervention 19 décembre 2016 285
18 janv. 2016 à 16:06
Ah oui, j'avais pas vu ce détail ^^

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

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
solara198 Messages postés 14 Date d'inscription lundi 18 janvier 2016 Statut Membre Dernière intervention 21 mars 2018
18 janv. 2016 à 16:16
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
0
solara198 Messages postés 14 Date d'inscription lundi 18 janvier 2016 Statut Membre Dernière intervention 21 mars 2018
18 janv. 2016 à 16:23
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
0
sipherion Messages postés 1809 Date d'inscription lundi 22 octobre 2007 Statut Membre Dernière intervention 19 décembre 2016 285
18 janv. 2016 à 16:52
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 ?
0
solara198 Messages postés 14 Date d'inscription lundi 18 janvier 2016 Statut Membre Dernière intervention 21 mars 2018
18 janv. 2016 à 17:14
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).
0
solara198 Messages postés 14 Date d'inscription lundi 18 janvier 2016 Statut Membre Dernière intervention 21 mars 2018
18 janv. 2016 à 17:16
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';
	
}

0
sipherion Messages postés 1809 Date d'inscription lundi 22 octobre 2007 Statut Membre Dernière intervention 19 décembre 2016 285
18 janv. 2016 à 17:28
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.
0
solara198 Messages postés 14 Date d'inscription lundi 18 janvier 2016 Statut Membre Dernière intervention 21 mars 2018
18 janv. 2016 à 17:36
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';
	
}

0
sipherion Messages postés 1809 Date d'inscription lundi 22 octobre 2007 Statut Membre Dernière intervention 19 décembre 2016 285
19 janv. 2016 à 10:08
Es-tu sur que le contenu de ton champ Image ressemble à ça ? "<span>'.$img2.'</span><span>/</span>"
0
solara198 Messages postés 14 Date d'inscription lundi 18 janvier 2016 Statut Membre Dernière intervention 21 mars 2018
19 janv. 2016 à 15:09
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
0
sipherion Messages postés 1809 Date d'inscription lundi 22 octobre 2007 Statut Membre Dernière intervention 19 décembre 2016 285
19 janv. 2016 à 17:57
Peux tu me donner le contenu actuel de ta table Article ? En enlevant si nécessaire des données confidentielles.
0
solara198 Messages postés 14 Date d'inscription lundi 18 janvier 2016 Statut Membre Dernière intervention 21 mars 2018
20 janv. 2016 à 16:24
DSL POUR LE RATARD;
0
solara198 Messages postés 14 Date d'inscription lundi 18 janvier 2016 Statut Membre Dernière intervention 21 mars 2018
21 janv. 2016 à 21:05
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.
0