Salut,
Comment afficher une image de base de donnée de type longblob,
j'ai essayé ce code mais l'image ne s'affiche pas
Merci d'avance si vous trouvez la solution!
la base est :
CREATE TABLE IF NOT EXISTS `produits` (
`id` int(30) NOT NULL AUTO_INCREMENT,
`Nom_de_produit` varchar(50) NOT NULL,
`img` longblob NOT NULL,
`description` text NOT NULL,
`prix` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=27 ;
interface affichage est :
<?php
// Sous WAMP (Windows)
$bdd = new PDO('mysql:host=localhost;dbname=base_phoenixkids;charset=utf8', 'root', '');
$reponse = $bdd->query('SELECT * FROM produits');
// On affiche chaque entrée une à une
while ($produits = $reponse->fetch())
{
?>
<table>
<th><img width="200px" height="200px" src="<?php echo $produits['img'];?>"/></th>
<th style="color:#0404B4"><?php echo $produits['prix']; ?> Dinars</th>
<th ><span style="color:orange"><?php echo $produits['Nom_de_produit']; ?></span></br>
<?php echo $produits['description']; ?></th>
</table>
<?php
}
$reponse->closeCursor(); // Termine le traitement de la requête
?>
EDIT : Ajout des BALISES DE CODE (jordane)
A voir également:
Afficher une image en php à partir d'une base de données
Récupérer image base de données php - Meilleures réponses
//Affichage des erreurs php error_reporting(E_ALL);
//connexion à la BDD require_once "cnxBdd.php";
//Requete et affichage: try{ $reponse = $bdd->query('SELECT * FROM produits'); }catch(Exception $e){ //en cas d'erreur dans la requete echo "Erreur dans la requete !".$e->getMessage(); } // On affiche chaque entrée une à une while ($produits = $reponse->fetch()) {
meme probleme pas d'affichage d'image
et j'ai pas utiliser file_get_contents
Ben.... si tu ne l'as pas utilisé ... alors qu'on te dit de le faire ....... ne viens pas nous voir pour nous dire que ça ne marche pas.......!!!!!
On t'a expliqué quoi mettre ... je t'ai donné un lien qui donne un exemple ..... tu n'as plus qu'à lire ce qu'on te marque et à l'appliquer !!
2 - Evite de copier/coller le code de connexion à ta bdd dans tous tes codes .... places le dans un fichier à part que tu n'auras qu'à inclure dans tes pages.
de plus, Pour la connexion à la BDD... utilises le code suivant : (ça te permettra d'afficher les éventuelles soucis de requêtes comme dans ta question précédente)
<?php
//Fichier de connexion à la bdd : cnxBdd.php
try{
$bdd = new PDO("mysql:host=localhost;dbname=base_phoenixkids;charset=UTF8", 'root', '');
$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //pour activer l'affichage des erreurs pdo
} catch(PDOException $e){
echo 'ERROR: ' . $e->getMessage();
}
3 - Pour afficher une image issue d'un champ blob, il faut utiliser la syntaxe suivante :
Ce qui, une fois ton code remis en forme avec l'include du fichier de connexion à la BDD donnerait :
<?php
//Affichage des erreurs php
error_reporting(E_ALL);
//connexion à la BDD
require_once "cnxBdd.php";
//Requete et affichage:
try{
$reponse = $bdd->query('SELECT * FROM produits');
}catch(Exception $e){ //en cas d'erreur dans la requete
echo "Erreur dans la requete !".$e->getMessage();
}
// On affiche chaque entrée une à une
while ($produits = $reponse->fetch()) {
echo "<table>
<tbody>
<tr>
<td><img widtd='200px' height='200px' src='data:image/jpeg;base64,".base64_encode($produits['img'])."'></img></td>
<td style='color:#0404B4'>".$produits['prix']." Dinars</td>
<td ><span style='color:orange'>".$produits['Nom_de_produit']."</span></br>".$produits['description']."</td>
</tr>
</tbody>
</table>";
}
$reponse->closeCursor(); // Termine le traitement de la requête
?>
L'image que tu essayes d'afficher ... à l'origine .. c'est un jpeg ou un png ????
Peux tu faire un echo du contenu de la variable ?
Peux tu également nous coller le code source (généré) de la page lorsque tu l'affiche ? (en faisant un clic-droit sur la page... afficher le code source) (colle nous uniquement la partie concernant la balise IMG )
Au début j'ai inserer des images dans la BDD par formulaire ,quelque soit le type png ou jpeg,
puis je veut afficher tous les images que j'ai inserer dans un tableau,
j'ai essayé ce code
j'ai pas compris ta demande,
si je fasse l' ECHO donc pas d'affichage de données !
Alors je vais essayer de te le formuler autrement......
Que contient ta variable $produits['img'] exactement ? Autrement dit .. quelle est la valeur issue de ta BDD ?
Et puis... à l'origine .. CETTE image ... elle est en JPEG ou en PNG ?
Sachant que si c'est un PNG alors il faut remplacer jpg par png
data:image/png ...
Et enfin.. ce qui m'étonne .. c'est le nombre de caractères affichés par l'encodage 64 ...
Toi tu n'as que : NTFic1RrS3BHYkwuanBn ... ça me parait peu.....
Es-tu sûr que l'image est correctement stockée en bdd ?
Quel script as tu utilisé pour insérer l'image dans ta base ?
Dans la BDD apres ouvrir http://localhost/phpmyadmin et afficher tableau de produits
j'ai trouver dans les img des fichier .bin ,
normalement les images que j'ai inserer sont de type jpg ,
$bdd = new PDO('mysql:host=localhost;dbname=base_phoenixkids;charset=utf8', 'root', ''); if(isset($_POST['inserer'])) { if (isset($_POST['Nom_de_produit']) AND isset($_POST['prix']) AND isset($_POST['description']) AND isset($_POST['img'] ))
extract($_POST); if (!empty($Nom_de_produit) && !empty($prix) && !empty($description) && !empty($img))
D'abord il manque enctype="multipart/form-data" dans form
ensuite pour récupérer l'image il faut utiliser $_FILE et non pas $_POST
au lieu de mettre $_POST['img'] mets file_get_contents($_FILES['img']['tmp_name'])
j'ai ajouter enctype="multipart/form-data" dans form ,
et changer $_POST['img'] par $_FILES['img']['tmp_name']),
l'insresion fonctionne ,
puis j'ai trover dans la BDD dans la colone des img des ficher .bin ,
et méme resultat dans il'interface d'affichage il n ya pas d'affichage des images .
Ben.... si tu ne l'as pas utilisé ... alors qu'on te dit de le faire ....... ne viens pas nous voir pour nous dire que ça ne marche pas.......!!!!!
On t'a expliqué quoi mettre ... je t'ai donné un lien qui donne un exemple ..... tu n'as plus qu'à lire ce qu'on te marque et à l'appliquer !!
Le probléme est dans l'insertion,
et ce code l'affichage est juste