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 :

Images stockées dans MySQL


Sujet :

PHP & Base de données

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 16
    Points : 8
    Points
    8
    Par défaut Images stockées dans MySQL
    Bonjour,

    Désolé de vous déranger mais après avoir lu quelque doc et la faq je n'ai pas pu résoudre mon soucis :/

    L'image ne s'affiche pas du tout, au contraire, je vois ce que je pense être le contenu du champ blob de l'image >.>
    Voicio le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
              $reqImage = "SELECT `binary`, `ext` FROM `uploads` WHERE `fileId` = ".$_GET['id'];
              mysqli_select_db($sqlLink, "talyon_website");
              $sqlImage = mysqli_query($sqlLink, $reqImage);
              $image = mysqli_fetch_array($sqlImage);
              header("Content-type: ".$image['ext']);
              echo $image['binary'];
    Et les champs mysql:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    fileId	int(11)   null:Non		auto_increment	 	 	 	 	 	 	
    name	text	latin1_swedish_ci    null:Non			 	 	 				 
    binary	blob		BINARY	null:Non			 	 	 				
    ext	varchar(25)	latin1_swedish_ci		null:Non
    Pour information, voici une petite partie de ce que cela m'affiche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    GIF89a^\0÷ÿ\0¤œš–’’kTMusqÛÙØãß߯£êãÚŠ…„ éÛÇyuuѲ“’ŽŠŠ·ª¤qmmƒ}zSB;ôåË}yy†‚}êÖ¸™––óïî…‚‚YVV953‘ŽöíÝmliû÷öIED\"żºXGCõóﮍsÖÌÈûû÷ìçæØȸΦtB:9¾½¼q`Z¤”Ž ¬«öëÕŒgRȶªÅÄò°®µ³²ž›š¤¢¡ÖÓЋŠ†öîäìÕª“Š‡çË›åͨÏÎÌsqmÆýûöì3ÜŨòæÓ3(%íëæiee¬¥¤)$#îâÌñݸ|yuœš–”ƒ{E*\"›Š„Õ»¤œŽ‰ûóæ÷óæ‘…ÌÆÆã滶µda`U3)³ž—I1)iieªª¦µš…ˆ}y‰rf–vdÞÙûïÝ£†ƒywËËÇðßÄT:1¬ ha•{tºº·¤tSÒ¼µòÚ¬YPMñæÜ[Mìóúµˆ^öûü£{e?$tqe?2Þ»Œ÷÷ûôâÀíïôÅ ‡úóÞùîÕ˾ÀÝå坃môï󜅀ìç먞žŒzqÔÏÏû÷û:.*—}ƒæçìûïãðçäƒX;àÒ¾¸¾ÃÍÍÑçÞàœŽ’âÑÉîÝÕçë켯¬”n_K?=¶¶·¡–˜ŽtqO-$ ¦ª¾ÃÄÚÝà৮¶ÑÕÚÅÎÌ…mqà ©{llµ‚¦¦¦QMM›¢¦ÐÇÈÀµ·š›Ÿðϧª‘•b]]®µ²ýïðy|•ƒ‰”šœ}uu}‚‚ƒs{À y¸º½øç×)kejŽ††aks••0,,glmˆrw]ZY‡Š’•ŸÇÇÇÿûû¦ª¬óóóÿÿÿçççûûûÿÿûïïï÷óó÷÷óããâðëëçãã÷÷÷ëëëïïëÿûÿûÿÿûÿûûûÿççã÷óø÷û÷ïëïó÷øóó÷ëïïèãçëë‰ïóòãçççëçó÷óããèuyyÿûóuuuC/.YemаµŽ’Ž¦ª¦àÞÞ}|~}ïîí2// ÿÿÿ!ÿNETSCAPE2.0\0\0\0!ù\0\0ÿ\0,\0\0\0\0^\0\0ÿ\0û	H° Áƒ*\\È°¡Ã‡#JœH±¢Å‹3jÜ·nŸÇŽ=r	rdÈ“Ôž¥|¦M%†g0ŸUƒùAÛL™0_RÛùlOŸ+«x¶5;SUùìeS–Úl¶Œ™´\'µ‘ëH´ÜIbéRk1—Æ„¹³¤Y’h}ž=i²íZ·>á²Ií Ý´róޝ‹w¯Þ¾€C^¥ëw¯Àuú_H¬o±bÆŽCž¬84jÌhpƒC€OˆÎ’¤F3XdaѪ€p¸‘Âœià pƒmœde\0\\úráB’‹R³øàB+ÛghPcz€ßÙ-#ÿ\00ûŠ›8|¹;KVldxL_rýÈø)Ûߟÿ¾þþü1FÀè߁¹±Í \06ø߃:!„V¸ÛÏ‡|˜Oˆ ŠHâˆ&¦¨O6pæ9pÀŸ\0È&„VÃ5ˆ°©Í@à Ô`ƒÖ5w3àC@+À—qÂͧ>6ÓÀrŸ8qÏ3xâÆ N|‡Àp7ÜàF½åÜŠ,\"Þc6Њ /ÐpCžÐ@ƒV¦Xâ (zâ¡‚ª(¢†&Ê舜@B4n4ji>7\\S¢\'Ìà觖r ¨‹’ú試æCùh\0Ârôÿ“€?Ñ„?ü$‚¬àŠú\0A KA\0Æ;,²Ã*{¬>4 f 9ÐÆÁI\0 í&‰„FZ_1ø?¸Ñ§ ˆò,,B\0ä`8–]Š!ÀƒoS\\PÌ°@ƒ\'-:`6x‚ü©êƍ×\03/Àvƒi9¼†F+ dÀì±Éû±³#‹ò²\'ƒÜ¬É+£Ü²ÊÄšìÉ\"¢¼°Í\"Ì:À3ÀLr\0$8��l\0ÍdñrÉ.Çœt+A«¬3Ï>›\034¤ŒtÔ.¡®¬ !$��?d]6>¶š+Ùkû“\0Jð³‚rÔâ,ÐDyïÿÝ7ßäÓb+n@Õ&çB5r±IhÈ šY¼°ÚÌŒûã,Ô\0§pTZVA– Û¥éÀÞ¸%RãÐÐÊ\\pø< `½1ëC‡Ó°1\0 0s]\0/t_>M,À·ÞÏû ýßÔOo½ôØG¯}õÙs¿ý T}5,Á3\'4³Í÷M$\\C§}_@ Î{ÿ‚ ,²õsæIÞ9˜Áû<ñ¼ó¥o}Þ3 p„ëñí~ ˜Áþø6\0/äC ðšd¥¶²ÍƒhëG4>H²•pm!è‡+ä$ƒCÇP¬íÔÀ ,0pr`\\K.p\0ÿÀI®ˆ›\0€’×™\0χ\0@À0*ð‰ X±ŠW´b@7ža#cûòzfðƒˆ‚p,X˜p\"çŬã`òf`:mÑ@`ÈÇb¸\0yðя2ôãÙÇ?2|À!‰ÈFr‹$$!pƒgP’xÁ\0А¾„cù(À3 ÀE:A”͘ IЮ|`’ñ*Àfp‚¡`5ˆ$ˆr(ôÛd\'ÃáHAàÍhÆ	ò\0Qâ €\0~àeR#Wb;¡MÈͶ…ðVmç6Å©M]©p¾Ò#òÐ ŸàœŽ ˜Â\\€)` AL‚¦Ðÿ\0Õñ`‰˜¬ˆaX¡ˆ€B ìg¨WÎp¬ˆF\0xF\0P\'h ,øZ¯zåM‘yûÝxаØà—¹h§সé\0rŠSòt§> jO‡ T¢þô¨B-ªRÊg|¡¯sƒP¾fü`\0¹üÁæ§Óœ EEß6h°Ô›Ö`$¸@¤fƒM \0£\0\"¡ŠSª&óªe‚0®ñÑpÝ9ÂüÉ#€€–ƒ§bµÉ¶ZõãV‹ífdÉI¶ $ üð@‡*‚_5A\0B\"`\0À ÁQèèÂxZ+Xá CB)€æÿ)ò¦@p\0äúSäíCFI7Œ/¸a7\0½5CÝâ”+BƒV\0\0z! 7ð„œ°\0 @ ÑünxÁMòŠ·¼ãM/z×{Þöš÷½êuoz3€,àã\"¥2Ÿ@ 6Øê3üû]œ€äÂ3p øF“†\0„[¡Uà#YpÃ#œ§’7 @ÂøaÈ*nhƐ0¶hÀ Gh ?p‚Ìø,f¬duŒ«oNöÇ<6ÛÛ”\0 4€\0‚ŒÀd9A	Ã6Ð	$��A-°Â*ô ‡)—Ša®†F4\0\0Þð]ï!ÿ»Í \\›\\ŒVÀVdí¢	ˆfn!°\0 \\€»ÁëåÃÎå 	@@x%MJGzÒ˜®t¦/ éN_Z³–¦´BÍQoÚÒAÓìh@Ëg, ÒÀ@\'g`j³ ¼À€Ÿž‘éQØ6Ö
    Vous pourriez m'aider à comprendre?
    Merci

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 393
    Points : 15 754
    Points
    15 754
    Par défaut
    le navigateur affiche le contenu de l'image donc c'est sûrement l'entête qui n'est pas correct

    regarde cet article pour plus d'informations sur le stockage de fichiers dans MySQL :
    http://beaussier.developpez.com/arti...hp/mysql/blob/

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 16
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par mathieu Voir le message
    le navigateur affiche le contenu de l'image donc c'est sûrement l'entête qui n'est pas correct

    regarde cet article pour plus d'informations sur le stockage de fichiers dans MySQL :
    http://beaussier.developpez.com/arti...hp/mysql/blob/
    justement je viens de le refaire et cela ne fonctionne toujours pas :/
    Cette fois j'ai une erreur supplémentaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Warning: Cannot modify header information - headers already sent by (output started at /home/html-public/talyon/sd/test/www/up/index.php:6) in /home/html-public/talyon/sd/test/www/up/index.php on line 77

    Voila le code:
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
     
    <form enctype="multipart/form-data" actopn="" method="post">
    <input type="hidden" name="MAX_FILE_SIZE" value="250000" />
    <input type="file" name="fic" size="50" />
    <input type="submit" name="submit" value="Envoyer" />
    </form>
    <?php
    function transfert()
    {
      $ret = false;
      $img_blob = "";
      $img_taille = "";
      $img_nom = "";
      $taille_max = 250000;
     
      if (!$ret = is_uploaded_file($_FILES['fic']['tmp_name']))
      {
        echo "probleme transfert";
        return false;
      }
      else
      {
        $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'];
     
        $sqlLink = mysqli_connect(******);
        mysqli_select_db($sqlLink, ******);
     
        $img_blob = file_get_contents($_FILES['fic']['tmp_name']);
     
        $reqInsert = "INSERT INTO images (img_nom, img_taille, img_type, img_blob) VALUES ('".$img_nom."', '".$img_taille."', '".$img_type."', '".addslashes($img_blob)."')";
        $sqlInsert = mysqli_query($sqlLink, $reqInsert);
     
      }
     
     
    }
     
    if (isset($_FILES['fic']))
    {
      transfert();
    }
     
    if (isset($_GET['id']))
    {
      $id = intval($_GET['id']);
     
      $sqlLink = mysqli_connect(******);
      mysqli_select_db($sqlLink, ******);
     
      $reqData = "SELECT img_id, img_type, img_blob FROM images WHERE img_id = ".$id;
      $sqlData = mysqli_query($sqlLink, $reqData);
      $data = mysqli_fetch_array($sqlData);
     
      if (!$data['img_id'])
      {
        echo "Id inconnu";
      }
      else
      {
        header("Content-type: ".$data['img_type']);
        echo $data['img_blob'];
      }
     
    }
    Après je verifie dans la database et toutes les infos sont correctes.
    Il reste juste ce soucis d'affichage d'image :s


    EDIT: Je ne sais pas si cela a un rapport quelconque, mais j'utilise Chrome / IE 8. A priori uniquement Chrome sauf sur peu de site ou ca ne passe pas.
    OS: Seven

  4. #4
    Membre régulier Avatar de magicstar
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations forums :
    Inscription : Mars 2007
    Messages : 136
    Points : 84
    Points
    84
    Par défaut
    Bonjour,
    Désolée je n'ai pas d'idée sur le type blob, mais ce que je fais d'habitude c'est de stocker le chemin de mon image dans un champ de type texte avec les balises image exp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <img src="c:/image/image1.png" alt="image">
    Bon chance

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Doubs (Franche Comté)

    Informations forums :
    Inscription : Août 2007
    Messages : 21
    Points : 25
    Points
    25
    Par défaut
    Citation Envoyé par Lereyn Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Warning: Cannot modify header information - headers already sent by (output started at /home/html-public/talyon/sd/test/www/up/index.php:6) in /home/html-public/talyon/sd/test/www/up/index.php on line 77
    Le mesage d'erreur est très clair: header ne peut pas s'exécuter, parce que ton script a déjà renvoyé quelquechose (il est gentil, il te dit même que c'est la ligne 6)...
    Deux solution: modifier ton script pour qu'il n'affiche RIEN avant d'appeler header() ou bien utiliser l'output buffering (juste ajouter ob_start() au tout début de ton script)

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 16
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par megar Voir le message
    Le mesage d'erreur est très clair: header ne peut pas s'exécuter, parce que ton script a déjà renvoyé quelquechose (il est gentil, il te dit même que c'est la ligne 6)...
    Deux solution: modifier ton script pour qu'il n'affiche RIEN avant d'appeler header() ou bien utiliser l'output buffering (juste ajouter ob_start() au tout début de ton script)
    J'ai déjà essayé sans succès

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Doubs (Franche Comté)

    Informations forums :
    Inscription : Août 2007
    Messages : 21
    Points : 25
    Points
    25
    Par défaut
    Remplace voir
    header("Content-type: ".$image['ext']);
    par:
    header("Content-type: image/gif");

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 16
    Points : 8
    Points
    8
    Par défaut
    Je retourne voir la soc, je reviens quand j ai trouve :p

  9. #9
    Invité
    Invité(e)
    Par défaut
    CONSEIL :
    Eviter d'enregistrer les images (champ BLOB) directement dans la DB !
    La BD va rapidement "grossir" !

    Il est préférable :
    - d'enregistrer les images dans un répertoire (dossier),
    - et enregistrer le nom (et chemin) de l'image dans la BD (champ Varchar).

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 16
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    CONSEIL :
    Eviter d'enregistrer les images (champ BLOB) directement dans la DB !
    La BD va rapidement "grossir" !

    Il est préférable :
    - d'enregistrer les images dans un répertoire (dossier),
    - et enregistrer le nom (et chemin) de l'image dans la BD (champ Varchar).
    Je sais mais la base de données n'est pas un soucis, mes sites et forums sont hébergés sur un dédié que je gère, et pour un site, je préfère largement stocker les images dans la base de données

Discussions similaires

  1. Réponses: 0
    Dernier message: 09/10/2012, 17h28
  2. miniature d'images stockés dans une base de donnée mysql
    Par plage dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 19/07/2011, 12h48
  3. [MySQL] Télécharger images stockées dans mysql
    Par else_if dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 14/05/2008, 05h53
  4. [MySQL] afficher image stockée dans mysql
    Par dino-info dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 05/05/2008, 01h10
  5. [MySQL] Afficher une image stockée dans MySql
    Par yanng dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 12/11/2007, 20h56

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