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 :

affichage d'image issu de MySQL


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    420
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 420
    Par défaut affichage d'image issu de MySQL
    bonjour à tous,

    Je suis confronté léger soucis d'affichage d'une image stocker dans MySQL.
    Pour ce qui est de l'enregistrement dans la BDD et l'affichage je me suis appuyé sur ce tutoriel
    http://beaussier.developpez.com/arti...hp/mysql/blob/

    La partie enregistrement ce fait très bien (enfin je pense puisque le champ blob se rempli ) mais par contre je sais pas ce qui est stocké est correct ou pas.

    Le site est basé sur un pseudo MVC je ne sais pas si ela peux avoir une influence sur l'affichage de l'image, je ne suis pas assez expérimenté dans ce domaine, mais c'est en forgeant que l'on devient forgerons )

    Pour l'enregistrement voici le code

    Pour ce qui est de la vue (il s'agit d'une fenetre modal)
    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
     
    <?php
        if (isset($_FILES['fic'])) {
            transfert();
        }
        ?>
        <div class="modal fade" id="uploadImage" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
            <div class="modal-dialog">
                <div class="modal-content">
                    <div class="modal-header">
                        <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
                        <h4 class="modal-title">Insérer une image du site</h4>
                    </div>
                    <div class="modal-body">
                        <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>
     
                    </div>
                    <div class="modal-footer">
                        <button type="button" class="btn btn-default" data-dismiss="modal">Fermer</button>
                    </div>
                </div><!-- /.modal-content -->
            </div><!-- /.modal-dialog -->
        </div><!-- /.modal -->
    fonction tranfert
    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
     
    function transfert() {
        $ret = FALSE;
        $img_blob = '';
        $img_taille = 0;
        $img_type = '';
        $img_nom = '';
        $taille_max = 250000;
        $idimage = $_SESSION['iddossier'] . $_SESSION['sousDossierEnCours'];
     
        $ret = is_uploaded_file($_FILES['fic']['tmp_name']);
        if (!$ret) {
            echo"Problème de transfert";
            return FALSE;
        } else {
            //le fichier à bien été reçu
            $img_taille = $_FILES['fic']['size'];
     
            $imageRetailler = PhpThumbFactory::create($_FILES['fic']['tmp_name']);
            $imageRetailler->resize(300, 300)->save($_FILES['fic']['tmp_name']);
            $img_taillereduit = $_FILES['fic']['size'];
            if ($img_taille > $taille_max) {
                echo 'Trop gros';
                return FALSE;
            } else {
                $img_type = $_FILES['fic']['type'];
                $img_nom = $_FILES['fic']['name'];
                //recupération du contenu binaire du fichier image stocker dans un répertoire temporaire
                $img_blob = file_get_contents($_FILES['fic']['tmp_name']);
                //enregistrement de l'image dans la BDD
                $pdo = PDOIbgn::getPDOIBGN();
    //            $req = "UPDATE sousdossiers SET photoDuSite= '" . addslashes($img_blob) . "' WHERE dossiers_iddossiers = " . $_SESSION['iddossier'] . " AND numSousDossiers = " . $_SESSION['sousDossierEnCours'];
                $req = "INSERT INTO images(idimages, imgNom, imgTaille, imgType, imgBlob) VALUES (" . $idimage . ",'" . $img_nom . "','" . $img_taille . "','" . $img_type . "','" . addslashes($img_blob) . "')";
                $pdo->requeteAction($req);
                return TRUE;
            }
        }
    }
    Avant l'enregistrement je redimmensionne l'image pour qu'elle puissent s'afficher dans une cellule d'un tableau prédimmentionner, por ce faire j'utilise la bibliothèque PhpThumb.

    Pour l'affichage de l'image
    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
     
    <table class="table table-image" id="table-image">
                            <tr>
                                <th>
                                    <?php
                                    $req = "SELECT idimages,imgType, imgBlob FROM images WHERE idimages = " . $_SESSION['iddossier'] . $_SESSION['sousDossierEnCours'];
                                    $col = $pdo->getFetchRow($req);
                                    if (!$col[0]) {
                                        ?>
                                        <img src="./img/image-inserer-icone-3816-128.png">
                                        <?php
                                    } else {
                                        header("Content-type: " . $col[1]);
     
                                        echo $col[2];
                                    }
                                    ?>
     
                                </th>
                            </tr>
                        </table>
    Ce que j'obtiens à l'affichage c'est ceci (c'est qu'un extrait sinon il y a 8km de ligne de ce tye)
    ����JFIF��R��f|���`��ڠ�����f��"#��]�bW8#9�����"+���=�כ�_�Zz-��Y�.!;F����������WX��L��G����4�ڪ2w���OL�ԓ��Ӝח�j��Gl�����8 <�|�C�ՑN�f!� ņI#'������9$b�lݣ�^�}�]|�\M��JUl�K�i]^�ךﮚ]]�uE������5(ۏ4�$ pG_C�=H=�y�[��#(���R������ޤ�Q�+�P�d,����w �� vHɇ�8��z]F��g��q-H?�&�n^k�7�����T\���͞)N���ߦឝpO_|{ו�B^1��/���� x�9$�$q�c�%�$�f`T���ו8�pN O�<{_�����̨�u$ܹ��i��h��9�?ڋ�����j��"a�*�~��'8����#��m�C���C ...
    Pouvez vous m'aider s'il vous plait à trouver la solution pour que j'apprenne l'erreur ou les erreurs que j'ai faites ?

    Je vous en remercie par avance
    bonne journée

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Affiche $col[1] tout seul pour voir ce qu'il contient.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Le stockage de la photo dans la base de données est une contrainte imposée ?

    Généralement on préfère stocker simplement le fichier vers l'image sur le disque afin de ne pas surcharger les bases. Et c'est en plus bien plus pratique
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    420
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 420
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Affiche $col[1] tout seul pour voir ce qu'il contient.
    pour le contenu de $col j'ai

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    [0] = 11
    [1]= "image/pjpeg"
    [2]="\ufffd\ufffd\ufffd\ufffd\u0000\u0010JFIF\u0000 ..............."
    Grunk, oui c'est une contrainte que j'ai, j'aurai preféré les mettre dans un dossiers separer et mettre dans la BDD que les chemins

  5. #5
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Il faudrait déjà essayer avec "image/jpeg".
    Mais j'ai aussi un doute sur le contenu de ton blob.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    420
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 420
    Par défaut
    je viens de tester avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    header("Content-type: image/jpeg");
    à la place de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    header("Content-type: " . $col[1]);
    et le résultat est le même toujours des caractères et pas d'image.


    Pour ce qui est de l'enregistrement, j'ai supprimé les lignes concernant le redimentionnement pensant que ça pouvais venir de là mais non rien n'y fait

  7. #7
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Il y a peut être un différence d'encodage entre tes 2 fichiers et le mode de connexion mysql.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

Discussions similaires

  1. [MySQL] Affichage des images insérés dans une base Mysql
    Par ines_m dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 26/05/2008, 17h54
  2. Réponses: 1
    Dernier message: 02/03/2008, 16h16
  3. [MySQL]Affichage d'image depuis une base de données
    Par Sofute dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 20/02/2007, 14h43
  4. Affichage d'images depuis base MySQL
    Par klerdesign dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 25/10/2006, 15h47
  5. [SGBD] affichage d'image jpeg depuis une base mysql
    Par eric_300 dans le forum Requêtes
    Réponses: 2
    Dernier message: 10/09/2005, 12h27

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