Afficher une image contenu au format blob dans ma base de donnée
IIwayII
-
IIwayII Messages postés 27 Date d'inscription Statut Membre Dernière intervention -
IIwayII Messages postés 27 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'aimerais pouvoir insérer des images se trouvant dans ma base de donnée au format blob sur ma page web, mais je n'y arrive pas, je suis pas hyper habitué à mettre autre chose que du texte dans mes bases de données, et la plupart des choses que j'ai trouvé sur internet utilise soit la fonction mysql_query() qui ne semble plus marcher car à chaque fois que je l'utilise j'obtiens un message d'erreur indiquant que cette fonction est indéfini et ces pages web étaient assez anciennes, ou soit le code est très compliqué alors que, afficher une image ne devrait pas l'être tant que ça si ?
Enfin bref je ne sais pas si c'est très clair, mais avec quoi je pourrais afficher une image contenu au format blob ?
J'aimerais pouvoir insérer des images se trouvant dans ma base de donnée au format blob sur ma page web, mais je n'y arrive pas, je suis pas hyper habitué à mettre autre chose que du texte dans mes bases de données, et la plupart des choses que j'ai trouvé sur internet utilise soit la fonction mysql_query() qui ne semble plus marcher car à chaque fois que je l'utilise j'obtiens un message d'erreur indiquant que cette fonction est indéfini et ces pages web étaient assez anciennes, ou soit le code est très compliqué alors que, afficher une image ne devrait pas l'être tant que ça si ?
Enfin bref je ne sais pas si c'est très clair, mais avec quoi je pourrais afficher une image contenu au format blob ?
Configuration: Windows / Chrome 89.0.4389.82
A voir également:
- Image de blob
- Image iso - Guide
- Légender une image - Guide
- Reduire taille image - Guide
- Acronis true image - Télécharger - Sauvegarde
- Image gratuite - Guide
2 réponses
Bonjour,
Petite parenthèse au cas où :.. c'est une mauvaise pratique.
Il est préférable ( pour des raisons de place et de performance) de ne stocker en bdd que le chemin vers l'image.... et de mettre l'image simplement dans un dossier de son site web.
Quoi qu'il en soit,
pour afficher une image stockée en blob ( je suis d'ailleurs étonné que tu n'aies pas trouvé la réponse sur le net .. tellement iil est facile de l'avoir ...) il suffit d'utiliser la syntaxe
En effet, pour faire des requêtes dans une bdd, il faut désormais PDO ou mysqli
https://www.commentcamarche.net/faq/43261-php-l-extension-mysql-est-obsolete#top
Mais au final, ta question concerne l'affichage de l'image .... ou le fait de réaliser des requêtes dans ta bdd ?
Personnellement, j'ai une grosse préférence pour PDO
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
des images se trouvant dans ma base de donnée au format blob
Petite parenthèse au cas où :.. c'est une mauvaise pratique.
Il est préférable ( pour des raisons de place et de performance) de ne stocker en bdd que le chemin vers l'image.... et de mettre l'image simplement dans un dossier de son site web.
Quoi qu'il en soit,
pour afficher une image stockée en blob ( je suis d'ailleurs étonné que tu n'aies pas trouvé la réponse sur le net .. tellement iil est facile de l'avoir ...) il suffit d'utiliser la syntaxe
echo '<img src="data:image/jpeg;base64,'.base64_encode( $result['image'] ).'"/>';
mysql_query() qui ne semble plus marcher
En effet, pour faire des requêtes dans une bdd, il faut désormais PDO ou mysqli
https://www.commentcamarche.net/faq/43261-php-l-extension-mysql-est-obsolete#top
Mais au final, ta question concerne l'affichage de l'image .... ou le fait de réaliser des requêtes dans ta bdd ?
Personnellement, j'ai une grosse préférence pour PDO
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
Dis moi ce que ça donne
PS: J'ai corrigé ton message pour préciser le langage dans les balises de code.
Merci d'y penser à l'avenir
Explications disponibles ici : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
<?php //Affichage des erreurs php error_reporting(E_ALL | E_WARNING | E_NOTICE); ini_set('display_errors', TRUE); // connexion à la bdd ( moi je le mettrai dans un fichier à part que j'incluerai lorsque j'en ai besoin... try{ $bdd =new PDO('mysql:host=localhost;dbname=bdp;charset=utf8', 'root', 'root'); // Activation des erreurs PDO $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); } catch(PDOException $e) { die('Erreur : ' . $e->getMessage()); } //récupération PROPRE des variables AVANT de les utiliser $id = isset($_GET["id"]) ? trim($_GET["id"]) : NULL; if ($id) { // préparation de la requête $sql = 'SELECT img_id, img_nom, img_type, img_blob FROM images WHERE img_id = :id '; $datas = array(':id' => $id); try{ $result = $bdd->prepare($sql); $result->execute($datas); $terme_trouve = $result->fetch(); } catch(PDOException $e) { die('Erreur : ' . $e->getMessage()); if(!empty($terme_trouve)){ echo '<img src="data:image/jpeg;base64,'.base64_encode( $terme_trouve['img_blob'] ).'"/>'; //pour débuguer au cas où ça ne marche toujours pas : echo "<pre>"; print_r($terme_trouve); echo "</pre>"; // fin du debug. }else{ echo "Aucun résultat trouvé pour l'id : " . $id; } } ?>
PS: J'ai corrigé ton message pour préciser le langage dans les balises de code.
Merci d'y penser à l'avenir
Explications disponibles ici : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
J'ai éteint mon ordi mais je m'étais documenté sur internet et un site mavais conseiller de construire ma base ainsi :

Et je ne sais plus si je fais déjà un base_64 encode, je cous donnerai mes autres script demain...
L'image actuelle est une image jpg toute simple de très petite taille.
Encore merci pour votre patience...
Bonne nuit

Et je ne sais plus si je fais déjà un base_64 encode, je cous donnerai mes autres script demain...
L'image actuelle est une image jpg toute simple de très petite taille.
Encore merci pour votre patience...
Bonne nuit
Bonjour,
Voici mes autres script :
- Voici Index.php :
- et voici transfert.php :
Voici mes autres script :
- Voici Index.php :
<html> <head> <title>Index</title> </head> <body> <?php include ("transfert.php"); if ( isset($_FILES['fic']) ) { transfert(); } ?> <h3>Envoi image :</h3> <form enctype="multipart/form-data" action="#" method="post"> <input type="hidden" name="MAX_FILE_SIZE" value="250000" /> <input type="file" name="fic" size=50 /> <input type="submit" value="Envoyer" /> </form> </body> </html>
- et voici transfert.php :
<?php function transfert(){ $ret = false; $img_blob = ''; $img_taille = 0; $img_type = ''; $img_nom = ''; $taille_max = 250000; $ret = is_uploaded_file($_FILES['fic']['tmp_name']); if (!$ret) { echo "Problème de transfert"; return false; } else { // Le fichier a bien été reçu $img_taille = $_FILES['fic']['size']; if ($img_taille > $taille_max) { echo "Trop gros !"; return false; } $img_type = $_FILES['fic']['type']; $img_nom = $_FILES['fic']['name']; $img_desc = $_FILES['fic']['name']; try{ $bdd =new PDO('mysql:host=localhost;dbname=bdp;charset=utf8', 'root', 'root'); // Activation des erreurs PDO $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); } catch(PDOException $e) { die('Erreur : ' . $e->getMessage()); } $img_blob = file_get_contents ($_FILES['fic']['tmp_name']); $req = $bdd->prepare('INSERT INTO images(img_nom, img_taille, img_type, img_desc, img_blob) VALUES(:img_nom, :img_taille, :img_type, :img_desc, :img_blob)'); $req->execute(array( 'img_nom' => $img_nom, 'img_taille' => $img_taille, 'img_type' => $img_type, 'img_desc' => $img_desc, 'img_blob' => addslashes($img_blob))); return true; } } ?>
Merci beaucoup pour votre réponse, j'essaierai et reviendrai ici.
Oui j'ai cru comprendre que ce n'était pas une bonne pratique mais je ne vois pas comment faire d'autre pour récupérer les images que déposeront mes utilisateurs sur mon site... si vous avez des solutions pas trop compliqué je suis preneur :))
Encore merci, bonne soirée ????
Je n'obtiens pas de message d'erreur mais mon image ne s'affiche pas...Quant à votre propositions de mettre les images dans un répertoire, pourquoi pas mais comment dois-je m'y prendre ?