image bytea

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : image bytea

Re: image bytea

par totolosc1 » 04 mai 2012, 14:30

j'obtiens le résulat suivant :
nombre de ligne : 1
mime ; image/png
x89504e470d0a1a0a0000000d49484452000001000000010008060000005c etc...

par contre je me suis aperçu que le résultat que j'envoie dans la base de donnée, est différent de celui que je récupère, je m'explique :
le début de ce que j'envoie dans la base de donnée (dans la colonne picture de type bytea) ressemble à ceci :
\211PNG\015\012\032\012\000\000\000\015IHDR\000\000\001\000\000\000\001\000\010\006\000\000\000\\

or quand je récupère ce résultat sans le reconvertir avec pg_unescape_bytea (donc le résultat doit être identique au précèdent), j'obtiens ceci :
\x89504e470d0a1a0a0000000d49484452000001000000010008060000005c72a8

ce n'est pas logique si ?

Re: image bytea

par Mazarini » 04 mai 2012, 14:17

essaye :
<?PHP
// if (pg_num_rows($result) >= 1){
    echo 'nombre de ligne : ',pg_num_rows($result),'<br>';
    $row = pg_fetch_assoc($result);
    $image = pg_unescape_bytea($row['picture']);
    pg_close($connexion_bd);
    // header('Content-type: '.$row['mimetype']);
    echo "mime ; ",$row['mimetype'],'<br>';
    echo $image;
// }
?>
Mais je ne vois pas de problème. Peut être que l'affichage des variables...

Re: image bytea

par totolosc1 » 04 mai 2012, 14:10

Merci pour ta réponse Mazarini.

J'ai déjà vérifié plusieurs fois le test if (pg_num_rows($result) >= 1) et ça fonctionne.
Je viens également de vérifier si $result === false et non ce n'est pas le cas.
Je ne vois vraiment pas pourquoi ça ne fonctionne pas..

Re: image bytea

par Mazarini » 04 mai 2012, 13:54

Si tu as une page blanche, c'est que tu ne passe pas le test : if (pg_num_rows($result) >= 1)
Il faudrait ajouter un else pour vérifier cela.

Autrement, pour débuger, il faudrait tester la bonne exécution des ordres pg.
En particulier, au moins tester si $result===false après la lecture de l'image (je ne suis pas pro de pg)

image bytea

par totolosc1 » 04 mai 2012, 12:02

Bonjour à tous,
Après plusieurs heures de recherches je fais appelle à vos connaissances pour m'aider !

Je dispose d'une base de donnée avec dedans une table "users" qui comprend 5 colonnes dont "picture" de type bytea et "mimetype" de type text.
Mon objectif est de stocker une image (images/avatar-default.png) dans ma base de donnée et ensuite de pouvoir l'afficher.

Pour cela, j'ai en fait ma page d'inscription, pour l'instant très basique, qui va envoyer mon image par défaut dans la base de donnée.
Ensuite de récupère cette image dans un fichier image.php qui est censé générer que cette image, et la vient mon problème, j'ai beau tout essayer, j'ai toujours une page blanche..

Voici mes différents code :
----------inscription.php-----------
<?php
  include('connexionBdd.php');
  if (isset($_POST['inscription'])){
    if($_POST['inscription'] != null){
      $data = file_get_contents('images/avatar-default.png');
      $escaped_data = pg_escape_bytea($data);
      $mimetype = image_type_to_mime_type(exif_imagetype('images/avatar-default.png'));
      pg_query($connexion_bd,"INSERT INTO users(ident,password,name,picture,mimetype) VALUES ('{$_POST['identifiant']}','{$_POST['motDePasse']}',
      '{$_POST['identifiant']}','{$escaped_data}','{$mimetype}')");
      pg_close($connexion_bd);
    }
    else{
      echo "Une erreur s'est produite";
      pg_close($connexion_bd);
    }
  }
      echo '<img src="profil.php?id=totolosc1"/>';
?>
<form method="post" action="enregistrement.php">
  <input type="text" name="identifiant" placeholder="identifiant"/>
  <input type="password" name="motDePasse">
  <input type="password" name="motDePasse2">
  <input type="submit" name="inscription" Value="Inscription">
</form>
---------image.php-----------
<?php
  include('connexionBdd.php');
  $statut = pg_connection_status($connexion_bd);
  $result = pg_query($connexion_bd,"SELECT picture, mimetype FROM users WHERE ident='".$_GET['id']."'");
  if (pg_num_rows($result) >= 1){
    $row = pg_fetch_assoc($result);
    $image = pg_unescape_bytea($row['picture']);
    pg_close($connexion_bd);
    header('Content-type: '.$row['mimetype']);
    echo $image;
  }
?>
Si quelqu'un sait d'où vient le problème je le serais vraiment reconnaissant !
Merci d'avance.