IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Afficher une image stocké en base données


Sujet :

PHP & Base de données

  1. #1
    Membre actif
    Avatar de Blo0d4x3
    Inscrit en
    Octobre 2003
    Messages
    583
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 583
    Points : 265
    Points
    265
    Par défaut Afficher une image stocké en base données
    Bonjour, je souhaite afficher une image que j'ai stocké dans ma base de données mysql dans un champ de type blob.

    Pour cela je suis le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
     
       header("Content-Type: image/x-icon");
     
        $id = $HTTP_GET_VARS["id"];
     
        $connect = new MySQLConnexion();
        $connect->Connect();    
     
        $row = $connect->Query_Fetch_Row("SELECT Icon Groupe FROM WWW_Sites WHERE id = '$id'");
     
        $img = stripslashes($row[0]);
     
        $image = imagecreatefromwbmp($img);
     
     
        return $image;*/
    Je passe via l'url l'id de l'image stocké en base. A l'exécution de ce script j'ai une erreur pas très explicite qui me dit que l'image contient des erreurs et ne peut etre afficher.

    Cependant il y a une chose qui m'intrique.
    Lorsque j'ai sauvegarder l'url j'ai fait le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $connect = new MySQLConnexion();
                        $connect->Connect();    
     
                        echo"<br>image:::$img<br>";
     
                        $img = addslashes($img);
                        $connect->Update("UPDATE www_sites SET Icon = \"$img\" WHERE Nom = \"$site\"");
    J'ai afficher sur la page web le code correspondant à l'image et il ne correspond pas a celui stocké en base dans le blob, le code est different.

    Peut etre que c'est a rien a voir, je sais pas.

    Help me please!

  2. #2
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    ce n'est pas return $image qu'il faut utiliser, il te faut afficher (i.e. envoyer les données) de l'image, penche toi sur les fonctions imagejpg, imagepng, imagegif etc...
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  3. #3
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Salut

    Tu parles d'URL, ce qui me laisse penser qu'il y a peut-être confusion quelque part.
    Commençons par te donner le lien qui va bien :
    http://sql.developpez.com/stockerimages/

    Donc, deux solutions :
    • Déconseillé : tu n'as pas enregistré l'URL dans ta base mais bien le contenu du fichier image, auquel cas ton script doit aller chercher le contenu du champ BLOB et l'afficher au moyen de la librarie GD. C'est un peu ce que tu as fait mais tu t'y prends mal. Tu te rendras compte que le traitement est complexe et trop lourd pour être utile
    • Conseillé : tu as enregistré l'URL de l'image dans un champ VARCHAR, auquel cas il te suffit de l'envoyer dans une balise HTML IMG.

  4. #4
    Membre éclairé
    Avatar de Kioob
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 550
    Points : 764
    Points
    764
    Par défaut
    Hello,

    pourquoi diable ce stripslashes() après le SELECT ???

    s'il y a des slashs en trop, bah fallait pas les mettre avec addslashes()... En tous cas jouer avec addslashes() sur un contenu binaire, c'est risqué, mysql_real_escape_string() est clairement plus adaptée.

    Sinon concernant le fait de passer par PHP pour envoyer une image : il serait bon de penser à gèrer les entêtes qu'Apache envoye de lui même en temps normal. C'est à dire type mime, taille, date de modif, etag, et évidement les codes HTTP qui vont avec (code 304 principalement).
    Google is watching you !

  5. #5
    Membre actif
    Avatar de Blo0d4x3
    Inscrit en
    Octobre 2003
    Messages
    583
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 583
    Points : 265
    Points
    265
    Par défaut
    Sans le addslashes la requete update plante car dans le code de l'image on peut avoir des caractère " par exemple, donc avant l'insertion je fait addslashe puis dans le select stripslahe pour les virer.

    Maitenant si tu me dis que mysql_real_escape_string() est plus adapté, je vais modifier ca.

    Sinon pourquoi géré les paramètre qu'apache envoie ? ok pour les erreurs 304 et les dates de mofif. Mais le type mime?

  6. #6
    Membre éclairé
    Avatar de Kioob
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 550
    Points : 764
    Points
    764
    Par défaut
    Citation Envoyé par Blo0d4x3
    Sans le addslashes la requete update plante car dans le code de l'image on peut avoir des caractère " par exemple, donc avant l'insertion je fait addslashe puis dans le select stripslahe pour les virer.
    Visiblement tu n'as pas saisi à quoi servait le addslashes alors... Fais donc des essais avec du texte : les "\" ajoutés ne se retrouvent pas dans la base de données, ça n'aurait aucun sens. Et par conséquent, stripslashes est inutile après le SELECT.

    Quant au fait d'utiliser mysql_real_escape_string() à la place d'addslashes() en entrée, c'est en effet bien plus prudent.



    Sinon pourquoi géré les paramètre qu'apache envoie ?
    Pour que le navigateur s'adapte au mieux au contenu transféré. Et dans le cas d'une image, le fait qu'elle puisse être mise en cache me semble important.

    ok pour les erreurs 304 et les dates de mofif.
    Attention : le code 304 n'indique pas du tout une erreur. Ne vas pas confondre avec 404 !

    Mais le type mime?
    Je parlais du "content-type", que tu envois déjà.
    Google is watching you !

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 24
    Points : 22
    Points
    22
    Par défaut
    Un bout de code qui fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    show.php
    <?
    $CResult = mysql_query("select cdType, lbImage from images where idImage = $id", $CImages);
    $CNb = mysql_num_rows($CResult);
    if ($CNb > 0)
    {
      $cdType = mysql_result($CResult, 0, "cdType");
      $lbImage = mysql_result($CResult, 0, "lbImage");
      header("Content-Type: " . $cdType);
      echo $lbImage;
    }
    ?>
    Le champ cdType contient le type MIME de l'image sous forme de chaîne de caractères, par exemple image/jpeg ou image/png. Le champ lbImage contient l'image en binaire sous forme de BLOB.

    Et pour afficher l'image :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <img src="show.php?id=2" />

Discussions similaires

  1. Afficher une image stockée dans la Base de données
    Par SaladinDev dans le forum Ext JS / Sencha
    Réponses: 3
    Dernier message: 08/02/2012, 18h15
  2. Réponses: 7
    Dernier message: 23/11/2011, 17h29
  3. Afficher une image depuis la base de données
    Par Gunny dans le forum ASP.NET
    Réponses: 9
    Dernier message: 07/01/2010, 13h21
  4. [MySQL] Afficher une image stockée dans une base de données
    Par LuckySoft dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 22/04/2006, 12h57
  5. [Forms] Afficher une image stockée en base
    Par oramine dans le forum Forms
    Réponses: 12
    Dernier message: 01/02/2005, 14h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo