Afficher une image contenu au format blob dans ma base de donnée
Fermé
IIwayII
-
20 mars 2021 à 16:00
IIwayII Messages postés 27 Date d'inscription vendredi 12 mars 2021 Statut Membre Dernière intervention 23 juin 2021 - 22 mars 2021 à 12:55
IIwayII Messages postés 27 Date d'inscription vendredi 12 mars 2021 Statut Membre Dernière intervention 23 juin 2021 - 22 mars 2021 à 12:55
A voir également:
- Image as blob
- Image iso - Guide
- Acronis true image - Télécharger - Sauvegarde
- Faststone image viewer - Télécharger - Visionnage & Diaporama
- Image iso windows 10 - Guide
- Comment agrandir une image - Guide
2 réponses
jordane45
Messages postés
38296
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 novembre 2024
4 704
20 mars 2021 à 17:11
20 mars 2021 à 17:11
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
jordane45
Messages postés
38296
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 novembre 2024
4 704
20 mars 2021 à 19:55
20 mars 2021 à 19:55
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
IIwayII
Messages postés
27
Date d'inscription
vendredi 12 mars 2021
Statut
Membre
Dernière intervention
23 juin 2021
20 mars 2021 à 22:43
20 mars 2021 à 22:43
jordane45
Messages postés
38296
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 novembre 2024
4 704
>
IIwayII
Messages postés
27
Date d'inscription
vendredi 12 mars 2021
Statut
Membre
Dernière intervention
23 juin 2021
20 mars 2021 à 22:46
20 mars 2021 à 22:46
Déjà, il serait pas mal que tu nous donnes le contenu du blob pour qu'on puisse vérifier qu'il est valide.
ensuite, il serait pas mal de nous montrer comment tu sauvegardes dans ta bdd... ne ferais tu pas déjà un base_64 encode avant de le mettre en bdd ?
ensuite, il serait pas mal de nous montrer comment tu sauvegardes dans ta bdd... ne ferais tu pas déjà un base_64 encode avant de le mettre en bdd ?
IIwayII
Messages postés
27
Date d'inscription
vendredi 12 mars 2021
Statut
Membre
Dernière intervention
23 juin 2021
>
jordane45
Messages postés
38296
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 novembre 2024
Modifié le 20 mars 2021 à 23:13
Modifié le 20 mars 2021 à 23:13
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
IIwayII
Messages postés
27
Date d'inscription
vendredi 12 mars 2021
Statut
Membre
Dernière intervention
23 juin 2021
>
jordane45
Messages postés
38296
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 novembre 2024
21 mars 2021 à 11:03
21 mars 2021 à 11:03
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; } } ?>
jordane45
Messages postés
38296
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 novembre 2024
4 704
>
IIwayII
Messages postés
27
Date d'inscription
vendredi 12 mars 2021
Statut
Membre
Dernière intervention
23 juin 2021
21 mars 2021 à 13:41
21 mars 2021 à 13:41
Etrange que ça ne marche pas....
Pourrais tu nous fournir le résultat du blob
Pourrais tu nous fournir le résultat du blob
20 mars 2021 à 17:33
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 ????
20 mars 2021 à 17:46
Modifié le 20 mars 2021 à 19:49
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 ?