Afficher une image de type BLOB en PHP à partir d’une base de données
Dans ce tutoriel nous allons découvrir comment uploader et afficher des images blob en php. L’upload d’images est très simple. Il existe deux manières d’uploader une image soit dans une base de données ou dans un dossier et sauvegarder le chemin d’accès dans la base de données. Dans ce tutoriel, nous allons voir comment uploader une image dans une base de données.
MySQL a un type de données blob qui permet de stocker des données binaires. Un blob est un ensemble de données binaires stockées sous la forme d’une entité unique dans un système de gestion de base de données. Les blobs sont généralement des images, audio ou d’autres objets blob multimédia. MySQL a quatre types de BLOB:
- TINYBLOB
- BLOB
- MEDIUMBLOB
- LONGBLOB
Tous ces types ne diffèrent que par leurs tailles.
Étape 1: Créez une table nommée gallery. La table contiendra deux champs, le premier est « id » et le deuxième est « image » de type BLOB pour stocker l’image. Comme indiqué ci-dessous:
Étape 2: Créer la page index.php
<html> <head> <title>Afficher une image de type BLOB en PHP</title> </head> <body> <form enctype="multipart/form-data" action="upload.php" method="post"> <label>Uploader le fichier image:</label><br /> <input name="userImage" type="file" /> <input type="submit" value="Uploader" /> </form> </div> </body> </html>
Étape 3: Créer le fichier « upload.php » pour stocker l’image dans la base de données.
<?php if(isset($_POST["submit"])){ $b = getimagesize($_FILES["userImage"]["tmp_name"]); //Vérifiez si l'utilisateur à sélectionné une image if($b !== false){ //Récupérer le contenu de l'image $file = $_FILES['userImage']['tmp_name']; $image = addslashes(file_get_contents($file)); $host = 'localhost'; $username = 'root'; $password = ' '; $db = 'test'; //Créer une connexion et sélectionner la base de données $db = new mysqli($host, $username, $password, $db); // Vérifier la connexion if($db->connect_error){ die("Erreur de connexion: " . $db->connect_error); } //Insérer l'image dans la base de données $query = $db->query("INSERT into gallery (image) VALUES ('$image')"); if($query){ echo "Fichier uploadé avec succès."; }else{ echo "Échec d'upload du fichier."; } }else{ echo "Veuillez sélectionner une image à uploader."; } } ?>
Étape 4: Créer le fichier « display.php » pour récupérer l’image de la base de données.
Dans ce fichier, nous allons récupérer l’image à partir du base de données MySQL en fonction de l’ID et l’afficher sur la page Web. Pour rendre le fichier image dans la page Web, l’en-tête Content-type est utilisé.
<?php if(!empty($_GET['id'])){ $host = 'localhost'; $username = 'root'; $password = ' '; $db = 'test'; //Créer une connexion et sélectionner la base de données $db = new mysqli($host, $username, $password, $db); // Vérifier la connexion if($db->connect_error){ die("Erreur de connexion: " . $db->connect_error); } //Récupérer l'image à partir du base de données $res = $db->query("SELECT image FROM gallery WHERE id = {$_GET['id']}"); if($res->num_rows > 0){ $img = $res->fetch_assoc(); //Rendre l'image header("Content-type: image/jpg"); echo $img['image']; }else{ echo 'Image non trouvée...'; } } ?>
Par défaut, PHP n’autorise pas le téléchargement de fichiers > 2 Mo. Le téléchargement des photos volumineuses échoue si vous ne modifiez pas les directives upload-max-filesize et post-max-size.
N’oubliez pas de changer le mot de passe par défaut ou d’utiliser une autre méthode d’authentification.
Bonjour,
j’ai essayé mais ça ne fonctionne pas … J’ai tenté aussi de modifier la taille comme vous avez dit mais rien.. Pouvez-vous m’aider svp ? Merci
Peut-être que vous avez des erreurs, vérifiez votre error.log et regardez ce que vous avez là.
Bonjour,
j’ai essayé mais j’ai un petit probleme.
J’ai une notice d’erreur et un warning.
Warning: count(): Parameter must be an array or an object that implements Countable in C:\wamp64\www\photo.php on line 40
Notice: Undefined property: PDOStatement::$num_rows in C:\wamp64\www\photo.php on line 44
Pouvez-vous m’aider svp ? Merci
Cela arrive à cause de NULL en PHP 7.2 count() renvoie un Warning. Vous pouvez essayer de changer
à
Pour la deuxième erreur, vous essayez d’utiliser la syntaxe mysqli, mais vous utilisez PDO. Ça devrait être:
Bonjour je sui désolé de demandé mais, il faut mettre quoi de plus dans le index car javoue ne pas comprendre cette partie la genre c’est comme si l’utilisateur était dans une session, car la je ne comprend pas comment le « index » peux envoyé l’image qui recoit a « l’upload » Je debute en php donc voila pourquoi je ne comprend pas tout :/
Bonjour j’ai mis tout le code mais il manque un truc dans l’index non ? Car je debute en php et je comprend pas tout, comment la page upload peux avoir le fichier que la page index a ?
En fait la page index.php est utiliser pour afficher le formulaire au utilisateur, tandis que la page upload.php contient le traitement pour uploader l’image dans la base de donnée. Donc lorsque l’utilisateur soumettre le formulaire dans index.php l’image sera envoyé à la base de donnée via le fichier upload.php.
Salut j’ai testé le code mais après envoi de l’image dans la base de données j’ai une page blanche et la base de donnée reste toujours vidé..
Pourtant d’après la page upload je devais avoir un echo du genre l’image a été envoyé avec succès ou alors une erreur mais rien juste une page blanche pourtant tout à l’air clean