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 :

Upload Image MySQL [Fait] [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    218
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 218
    Par défaut Upload Image MySQL
    Bonjour tout le monde,

    Le sujet a déjà été traité mais mon problème est différent de ce que j'ai pu trouvé sur ce forum.
    Je souhaite uploader des photos via formulaire dans une BD MySQL. (Je travaille actuellement en local avec EasyPHP, cfg par défaut).

    Ma table PHOTO :
    - NUM_PHOTO (clé primaire), int(32), auto_increment
    - IMAGE_BIN longblob
    - NOM_FICHIER char(32)
    - TAILLE_FICHIER char(32)
    - TYPE_FICHIER char(32)
    - NUM_MANDAT char(32), clé étrangère, indiquant le mandat auquel la photo est associée

    Mon formulaire d'upload (dans photos.php) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <form method="post" <?php echo "action=\"checkPhotos.php?id=$id\"" ?> enctype="multipart/form-data">
            S&eacute;lectionnez la photo :&nbsp;<input type="file" id="image" name="imagee" size="60"><br />
            <input type="text" name="image" />
            <div align="center"><input name="ok" type="submit" value="Envoyer"></div></form>
    Mon code dans checkPhotos.php, qui effectue l'upload des données :
    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
     
    <?php
    			if (isset($_GET["id"]))
                    $num_mandat = $_GET["id"];
                else
                    exit("Impossible de récupérer la référence du bien pour lequel vous voulez ajouter une photo. Arrêt de l'exécution.\n");
     
    			mysql_connect("localhost", "root", "");
    			mysql_select_db("test");
     
                            $image = $_REQUEST["image"];
     
    			$donnees = addslashes(fread(fopen($image, "r"), filesize($image)));
    			$nom = "test";
    			$taille = filesize($image);
    			$type = filetype($image);
     
    			if ($result = mysql_query("INSERT INTO PHOTO (IMAGE_BIN, NOM_FICHER, TAILLE_FICHIER, TYPE_FICHIER, NUM_MANDAT) VALUES ('$donnees','$nom','$taille','$type','$num_mandat')"))
    				echo "result : ".$result;
    			else
    				echo "pb execution rqt. result = $result";
                            mysql_close();
    Et comme vous vous en doutez, ça ne fonctionne pas.

    Quelques points :
    - le $_REQUEST["image"] doit être impossible sur des champs de type <file>
    - j'avais modifié le code pour que $image soit une chaine contenant le chemin du fichier
    - je me suis inspiré d'un tutoriel sur le JDN. Ce n'est pas super bien expliqué mais c'est vraiment le type d'upload dont j'ai besoin (nécessité d'associer une photo à une donnée présente dans une autre table)

    Et biensur, mon message d'erreur pour le code que je viens de vous citer :
    (après avoir cliquer sur "Envoyer" dans le formulaire)
    Warning: fread(): supplied argument is not a valid stream resource in C:\Program Files\EasyPHP 2.0b1\www\****\****\checkPhotos.php on line 30
    INSERT INTO PHOTO (IMAGE_BIN, NOM_FICHER, TAILLE_FICHIER, TYPE_FICHIER, NUM_MANDAT) VALUES ('','test','','','reference')

    pb execution rqt. result =
    Il ne s'agit que d'un warning mais la requete ne s'exécute pas. Je pense que cela vient du fait que les données binaires de l'image ne sont pas correctement récupérées. Y a t-il un lien avec le poids de l'image ? ... ?

    Merci de vos lumières,
    Bonne journée !

  2. #2
    Membre Expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    218
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 218
    Par défaut
    En effet mille excuse je n'avais pas fait attention à ce tuto
    En le suivant, l'upload s'effectue sans problème. Tout marche nikel, jusqu'à l'affichage des images.

    Je m'explique : je voudrai afficher les images (type blob, binaire) dans une page qui a déjà du contenu. Or, dans le tuto, on nous indiquer qu'il faut préciser le type de donnée que l'on va afficher, avec l'instruction "header" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    (...)
    header ("Content-type: ".$photo->TYPE_FICHIER);
    echo $photo->IMAGE_BIN."<hr>";
    //j'utilise des objets pour afficher le contenu de mes requêtes - ici, $photo contient le résultat de SELECT * FROM MATABLE par exemple
    Le problème est que si je mets "header", l'image ne voudra pas s'afficher dans le corps de ma page (dans les balises <body>)... Erreur :
    L'image "http://127.0.0.1/***/***/photos.php?id=123" ne peut être affichée car elle contient des erreurs.
    Si j'enlève "header", cela m'affiche le contenu "binaire" de l'image (que des caractères spéciaux)...

    Il y a t-il un moyen pour contourner cette erreur ? Préciser le type de données que l'on va afficher sans l'instruction "header" peut-être ?

    Merci encore et bonne journée

  4. #4
    Membre confirmé Avatar de stela86
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 197
    Par défaut
    Peut etre que tu devrais créer un nouveau fichier image.php, qui t'envoi ton image comme tu le fais deja (echo ...).
    Rajoute ensuite dans le fichier quelque chose du genre:
    <img src='image.php?id=%s' />

    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
     
    image.php :
    <?php 
    //recupere l'id
    //SELECT machin truc
     
    header('Content-type: image/png');
    echo $image;
     
    ?>
     
    index.php :
     
    ...<img src='image.php?id=//l'id de ton image' />
    ...

  5. #5
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    218
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 218
    Par défaut
    It works !

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Upload image dans table mysql
    Par bronon dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 11/07/2013, 23h19
  2. Upload image vers BDD Mysql
    Par nacimovitch dans le forum Android
    Réponses: 2
    Dernier message: 18/05/2013, 21h59
  3. Upload image sur page web puis MYSQL
    Par d.ayuk33 dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 30/11/2011, 18h52
  4. Upload image png vers base de données mysql langage c + GTK
    Par smalldebian dans le forum GTK+ avec C & C++
    Réponses: 5
    Dernier message: 19/08/2009, 10h08
  5. [MySql][Struts] Upload image
    Par cirdec dans le forum Struts 1
    Réponses: 8
    Dernier message: 13/03/2006, 13h00

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