Foros del Web » Programando para Internet » PHP »

Problema al mostrar imagen almacenada en DB

Estas en el tema de Problema al mostrar imagen almacenada en DB en el foro de PHP en Foros del Web. Hola! como estan ?[B] Tengo razones para querer almacenar imagenes en una DB , y eso hago (o intento) pero luego no puedo lograr que ...
  #1 (permalink)  
Antiguo 05/09/2009, 19:01
 
Fecha de Ingreso: agosto-2009
Mensajes: 247
Antigüedad: 14 años, 8 meses
Puntos: 10
Exclamación Problema al mostrar imagen almacenada en DB

Hola! como estan ?[B]

Tengo razones para querer almacenar imagenes en una DB, y eso hago (o intento) pero luego no puedo lograr que se vean (si quieto el "Header" se ve el binario... y pareciera que estuviera bien)

Para almacenarlas evitando el MYSQL injection (no uso funciones nativas de PHP porque estoy usando una clase que me maneja la DB), utilizo unas funciones que encontré que convierten una cadena binaria en otra en hexa y vice-versa.

Código PHP:
<?
...
$rs $DB->execute("SELECT url FROM imagenes'");
  
  foreach (
$rs as $row){    
    
$url $row['url'];    
    
$imagen file_get_contents($url);
    if (
strlen ($imagen)>300){
      
$imagen '0x'.strToHex($imagen);
      
$DB->execute ("INSERT IGNORE imagedump (url,imagen) VALUES ('$url','$imagen')"); 
      
sleep (0.11);
    }
  }
  
  
// permite almacenar en hexa un archivo binario (como una imagen)
  
function strToHex($string)
{
    
$hex='';
    for (
$i=0$i strlen($string); $i++)
    {
        
$hex .= dechex(ord($string[$i]));
    }
    return 
$hex;
}
 
?>
y para visualizarla.......hago esto:

Código PHP:
<?
  header
("Content-Type: image/jpeg");   //jpeg, png, gif, bmp

  
include "connect.php"// DB connect  

  
$rs $DB->execute("SELECT imagen FROM imagedump WHERE url LIKE '%.jpg'"); // url='blue.jpg'
  
$i $rs->fields['imagen'];
  
$imghexToStrsubstr ($i,2)  );
    
  
  echo 
strlen($img);

   function 
hexToStr($hex)
{
    
$string='';
    for (
$i=0$i strlen($hex)-1$i+=2)
    {
        
$string .= chr(hexdec($hex[$i].$hex[$i+1]));
    }
    return 
$string;
}

?>
y se ve una CRUZ alguna idea ? gracias!

EDIT: he aislado UN problema........ y ocurre al hacer un requiere_once() que hacia otro include.... en el cual habia un espacio por fuera de <? ?>

Ahora veo........que sigue fallando!

Última edición por bigwhite; 05/09/2009 a las 20:22
  #2 (permalink)  
Antiguo 05/09/2009, 20:28
 
Fecha de Ingreso: agosto-2009
Mensajes: 247
Antigüedad: 14 años, 8 meses
Puntos: 10
Respuesta: Problema al mostrar imagen almacenada en DB

He probado con una imagen en particular........ y al guararse, se trunca!

Mi imagen media 4488 bytes y al recuperarla de la DB me dejo solo 4276

Como puedo hacer para guardar una imagen (binario) en un campo de la DB sin caer una mysql-injection ? ut8-enconde ? no se que mas probar

Última edición por bigwhite; 05/09/2009 a las 20:39
  #3 (permalink)  
Antiguo 06/09/2009, 17:55
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Problema al mostrar imagen almacenada en DB

Ok para evitar complicarnos mucho, te sugiero mejor mirar este ejemplo a ver si te ayuda. http://www.forosdelweb.com/f18/tutor...inario-127775/
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #4 (permalink)  
Antiguo 06/09/2009, 21:00
 
Fecha de Ingreso: agosto-2009
Mensajes: 247
Antigüedad: 14 años, 8 meses
Puntos: 10
Respuesta: Problema al mostrar imagen almacenada en DB

Abimael: gracias.......mirando el codigo hace un addslashes() de lo que lee:

Cita:
$binario_contenido = addslashes(fread(fopen($binario_nombre_temporal, "rb"), filesize($binario_nombre_temporal)));
El problema es que a mi no me funciona:

Cita:
Fatal error: Uncaught exception 'ADODB_Exception' with message 'mysql error: [1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\0JFIF\0\0d\0d\0\0ÿÛ\0C\0    $.\' \",#(7),0' at line 1] in EXECUTE("INSERT IGNORE imagedump (url,imagen) VALUES ('http://img128.imagevenue.com/loc24/th_27437_9.jpg',ÿØÿà\0JFIF\0\0d\0d\0\0ÿÛ\0C\0     $.\' \",#(7),01444\'9=82<.342ÿÛ\0C  2!!222222222222222222222222222222222222222222222 22222ÿÀ\0\0 \0k\0ÿÄ\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0ÿÄ\0;\0\0\0\0\0\0!1 AQq\"2a¡3B‘±Á#Rá$4brs‚’ÑÿÄ\0\0\0\0\0\0\ 0\0\0\0\0\0\0\0ÿÄ\0/\0\0\0\0\0\0\0!1AQ\"q#2aR¡±Áð ‘ÑÿÚ\0 \0\0?\0Åà×ìrÞ™ñœRxY6ÒÆŹ¶Î\0®r‡ŽGVàÄØ ”{¿Ü)c=‡ØëWA®C\"³@Á@\0ÐP\0 @@šCà…oS¢2Óº4zµòZ9*ª¼îG]ü*–®÷\\w\"æ–•d°Ífд=Yí¢$`s¸æf>²ÖYäÔUW+š× éú•‰¾Ó’5e}Êî*ƒ¾Õ%Z›+–ÙœY§„ÖQGâ; t»ôYbHûTæŸ in C:\xampp\htdocs\easypost\clases\adodb5\adodb-exceptions.inc.php on line 78
Como ves..... sigue produciendo una INJECTION (!)
  #5 (permalink)  
Antiguo 06/09/2009, 23:34
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Problema al mostrar imagen almacenada en DB

Pero trata de usar el mismo codigo y me dejas saber si no te funciona.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #6 (permalink)  
Antiguo 06/09/2009, 23:49
 
Fecha de Ingreso: agosto-2009
Mensajes: 247
Antigüedad: 14 años, 8 meses
Puntos: 10
Respuesta: Problema al mostrar imagen almacenada en DB

ABI: es que no tiene nada que ver...... con lo que quiero hacer.... yo no subo los archivos de esa forma..... y la unica funcion que usan para "escapar" es addslashes()

Lo que se me ocurre es que ADODB5 tenga algun bug y por ello no funcione....... pero trataré de usar funciones de mysql........

Alguna otra sugerencia ??
  #7 (permalink)  
Antiguo 06/09/2009, 23:57
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Problema al mostrar imagen almacenada en DB

Iiiicchhh vas a tener que me ponga a ver como subir una imagen a una base de datos. Lo he hecho pero no con PHP sino con ASP hace 8945487845841548 años luz. Voy a tener que hacer pruebas y te dejo saber como me va.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:24.