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>

 
Créer et utiliser une API REST en PHP

<?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.";
    }
}
?>

 
Formulaire avec captcha en PHP

<?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.
QCM sur PHP

8 réflexions sur “Afficher une image de type BLOB en PHP à partir d’une base de données

  • mai 1, 2020 à 2:06 pm
    Permalien

    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

    Répondre
    • mai 1, 2020 à 3:08 pm
      Permalien

      Peut-être que vous avez des erreurs, vérifiez votre error.log et regardez ce que vous avez là.

      Répondre
  • septembre 28, 2020 à 2:37 am
    Permalien

    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

    Répondre
    • octobre 15, 2020 à 9:28 am
      Permalien

      Cela arrive à cause de NULL en PHP 7.2 count() renvoie un Warning. Vous pouvez essayer de changer

      count($yourVar)

      à

      count((is_countable($yourVar) ? $admin : []))

      Pour la deuxième erreur, vous essayez d’utiliser la syntaxe mysqli, mais vous utilisez PDO. Ça devrait être:

      if ($result->rowCount() > 0){
          while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
              // your code
          }
      }
      Répondre
  • mai 26, 2021 à 4:11 pm
    Permalien

    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 :/

    Répondre
  • mai 26, 2021 à 4:19 pm
    Permalien

    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 ?

    Répondre
    • mai 31, 2021 à 3:28 pm
      Permalien

      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.

      Répondre
  • octobre 11, 2022 à 1:47 pm
    Permalien

    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

    Répondre

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *