Problème de variable en pdo

Résolu
solara198 Messages postés 14 Date d'inscription   Statut Membre Dernière intervention   -  
solara198 Messages postés 14 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Membre Dernière intervention   286
 
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   Statut Membre Dernière intervention   286
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   286
 
Ton "images/AA.jpg" il vient d'où ?
0
sipherion Messages postés 1809 Date d'inscription   Statut Membre Dernière intervention   286
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   286
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   286
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   286
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   286
 
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   Statut Membre Dernière intervention  
 
DSL POUR LE RATARD;
0
solara198 Messages postés 14 Date d'inscription   Statut Membre Dernière intervention  
 
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