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 :

Enregistrer image dans champ blob sql server


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2012
    Messages : 23
    Par défaut Enregistrer image dans champ blob sql server
    Bonjour,

    je rencontre un soucis, je dois enregistrer des images dans une base de donnée SQL SERVER depuis mon site. La bdd est en french_ci_as et le site en UTF-8. Je n'ai pas l'habitude stocker les images en dur, en générale je préconise de stocker le chemin mais ici le gestionnaire de la db ne me laisse pas le choix. Ensuite je dois afficher ces images sur le site.

    J'ai essayé ceci
    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
     
    if(!is_uploaded_file($_FILES['logo']['tmp_name'])&& isset($_FILES['logo']))
       {
           echo 'Un problème est survenu durant l opération. Veuillez réessayer !';
       }
       else {
           //liste des extensions possibles
           $extensions = array('/jpg','/jpeg');
     
     
           //récupère la chaîne à partir du dernier / pour connaître l'extension
           $extension = strrchr($_FILES['logo']['type'], '/');
     
           //vérifie si l'extension est dans notre tableau
           if(!in_array($extension, $extensions))
           {
               echo 'Vous devez uploader un fichier de type jpg ou jpeg';
           }
           else {
     
               //on définit la taille maximale
               define('MAXSIZE', 500000);
               if($_FILES['logo']['size'] > MAXSIZE)
               {
                   echo 'Votre image est supérieure à la taille maximale de '.MAXSIZE.' octets';
               }
               else {
                   //connexion à la base de données
     
     
                   //Lecture du fichier
                   $filelogo      = file_get_contents($_FILES['logo']['tmp_name']);
                   $filelogo      = bin2hex($filelogo);
     
     
     
     
               }
           }
       }<br>ensuite j'enregistre dans ma db
    l'enregistrement ce fait correctement et en suite pour afficher l'image j'ai fait ça sous forme


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <img src='<?php echo "/image-event.php?idact={$donnees['IDACT']}"; ?>'

    avec pour image-event
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    include('connexion.php');
     
        // temp
        $objCharsetEvent = $dbh->query("SELECT Photo_BInaire FROM [ID143953_b4c].[dbo].[SQL_ACT] WHERE IDACT = {$_GET['idact']} AND IdLibTypeAct =5");
        $objCharsetEvent->execute();
        $event = $objCharsetEvent->fetch();
     
        header('content-type: image/jpeg');
    echo hex2bin($event['Photo_BInaire']);
    Seulement l'image ne s'affiche que partiellement et je ne vois pas du tout à quoi c'est du
    Nom : Sans titre-2.jpg
Affichages : 853
Taille : 20,0 Ko

    Avec cette méthode l'image est enregistré sous forme 0x6666643866666531303031383435373836393636303... et j'aimerais qu'elle soit plutôt enregistrer sous 0xFFD8FFE000104A46494600010101006000600000FFDB.... car je crois que l'erreur vient de la mais je ne sais pas comment atteindre ce résultat. Ou est-ce du au différence d'encodage entre le site et la db ?

    Merci d'avance

  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
    Est-ce que ton BLOB ne serait pas simplement trop petit ?

    Sinon un Blob c'est binaire pas hexadecimal.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2012
    Messages : 23
    Par défaut
    si je retire bin2hex quand j'updalode j'ai cette erreur SQLSTATE[HY000]: General error: 102 General SQL Server error: Check messages from the SQL Server [102] (severity 15) [(null)] donc je comprends pas trop

    voici le code d'updat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $reponse=$dbh->prepare("UPDATE [ID143953_b4c].[dbo].[SQL_ACT] SET Lib=:lib,[Date]=:dateevent,DatMax=:datemax,TypRem=:rem,Rue=:rue,Loc=:localite,Cop=:zip,NbMaxInvit=:invite,DateInscription=:inscription,DescriptionWeb=:description,Photo_BInaire=:photo WHERE IDACT=:id");
                    $reponse->bindValue('lib',$nom,PDO::PARAM_STR);
                    $reponse->bindValue('dateevent',$datedebutevent);
                    $reponse->bindValue('datemax',$datefinevent);
                    $reponse->bindValue('rem',$invitegalmembre,PDO::PARAM_INT);
                    $reponse->bindValue('rue', $rue, PDO::PARAM_STR);
                    $reponse->bindValue('localite', $localite, PDO::PARAM_STR);
                    $reponse->bindValue('zip', $zip, PDO::PARAM_STR);
                    $reponse->bindValue('invite',$nombreinvite,PDO::PARAM_INT);
                    $reponse->bindValue('inscription',$datefininscription);
                    $reponse->bindValue('description',$description,PDO::PARAM_STR);
                    $reponse->bindValue('photo',$filelogo);
                    $reponse->bindValue('id',$_GET['idact'],PDO::PARAM_INT);
                    $reponse->execute();

  4. #4
    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
    Tu as étudié la question de la taille ?
    Si les données n'étaient pas stockées dans le bon format, tu n'aurais rien du tout, pas un bout d'image.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2012
    Messages : 23
    Par défaut
    J'ai testé avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT IDPPH,[Photo_BInaire],
    	  datalength([Photo_BInaire])
      FROM [ID143953_b4c].[dbo].[SQL_PPH]
      order by datalength([Photo_BInaire]) desc
    et les seules images qui s'affichent tournent autour de 59000 dès que c'est supérieur l'image de n'affiche pas.
    Je ne pense pas qu'on puisse augmenter la taille max d'un champ image dans sql server d'autant plus que j'ai cru lire sur le champ image peut contenir l'équivalent de 2Go hors ici l'image fait 250Ko donc je ne comprends pas bien pourquoi ça pose un problème.....

  6. #6
    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
    Est-ce que tu peux nous donner ce qu'il y a dans la base pour une des photos avec lesquels ça ne marche pas ?
    Le but est de voir si les données sont mal stockées ou mal lues.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

Discussions similaires

  1. Insérer une Image dans une BDD SQL Server
    Par bluerequin dans le forum Développement
    Réponses: 15
    Dernier message: 23/11/2016, 10h53
  2. [SQL-Server] Images dans une base SQL Server
    Par matrouba dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 20/03/2008, 10h34
  3. [MySQL] Récuperer une image dans champs BLOB de la base de données
    Par gilou31 dans le forum PHP & Base de données
    Réponses: 16
    Dernier message: 28/02/2008, 16h32
  4. Stockage d'image dans une base sql server
    Par rafik1f dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 24/03/2007, 10h07
  5. [ADO]Transfert image dans champ blob
    Par dleu dans le forum Bases de données
    Réponses: 4
    Dernier message: 27/05/2005, 08h44

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