SoloCodigo

Programación Web y Scripting => PHP => Mensaje iniciado por: Ithilien en Martes 7 de Agosto de 2007, 00:26

Título: Extraer Imágenes Bmp Desde Mysql
Publicado por: Ithilien en Martes 7 de Agosto de 2007, 00:26
Hola, a la hora de extraer las imágenes de la base de datos de MySQL hago lo siguiente, por ejemplo:
Código: Text
  1.  
  2. $result = mysql_query("SELECT fotografia FROM persona WHERE dni = 111111");
  3. $result_array = mysql_fetch_array($result);
  4. header("Content-Type: image/bmp");
  5. echo $result_array[0];
  6.  
  7.  

El caso es que me muestra caracteres raros:

#+f�%2j�->o�-Aq�g�f�e�c...

y no sé por qué es. La imagen esta guardada como a partir de un bmp desde una aplicación que funciona paralelamente y se ve bien desde el programa. Entonces, que puede ser?

Gracias!
Título: Re: Extraer Imágenes Bmp Desde Mysql
Publicado por: Ithilien en Martes 7 de Agosto de 2007, 00:38
Justo antes de los caracteres raros aparece tambien:

Warning: Cannot modify header information - headers already sent by (output started at C:\AppServ\www\hhh.php:7) in C:\AppServ\www\hhh.php on line 41
Título: Re: Extraer Imágenes Bmp Desde Mysql
Publicado por: Enko en Martes 7 de Agosto de 2007, 15:58
Mh... las veces que tuve que usar una imagen lo hacia de otra forma.
La imagen la subia a una carpeta del servidor, y en la base de datos, guardaba la direccion de la imagen. Algo asi como "img/imagen_dni_3214564.jpg";
Luego simplemente hacia un query que me devolvia la direccion y hacia:
echo("<img src=$img_db_src>");

Lo que ocure es que eran imagenes de articulos, no de personas que tal vez tengan que estar cifradas.
Título: Re: Extraer Imágenes Bmp Desde Mysql
Publicado por: Ithilien en Miércoles 8 de Agosto de 2007, 11:16
Hola, lo que pasa es que guardo desde una aplicación la imagen en la base de datos, y lueo, para recuperarla, accedo directamente al servidor, que creo que es más facil a estas alturas para mi. Entonces, como puedo hacer, si he guardado en un campo BLOB la imagen, como BMP, recuperarla para mostrarla en el navegador?

Gracias!
Título: Re: Extraer Imágenes Bmp Desde Mysql
Publicado por: Enko en Miércoles 8 de Agosto de 2007, 16:58
No soy bueno en esto, pero te propongo esta solucion:
*)El texto del BLOB, guardalo en un archivo temporal llamado por ejemplo "tmp12345.bmp" o gif, jpg u otra
*)Luego usa la tecnica que te propuse, haz un echo("<img src='tmp12345.bmp'>");

PD> si no estoy mal, el campo BLOB debe ser de tipo BINARIO de lo contrario guardaria mal la imagen.
Recuerda generar un nombre de imagen agregandole por ejemplo la hora, porque si hay varios usuarios tratando de ver la pagina, habria problema. Podrias agragarle los digitos del DNI despues del tmp: "tmp324567897.gif"
Título: Re: Extraer Imágenes Bmp Desde Mysql
Publicado por: Ithilien en Viernes 10 de Agosto de 2007, 20:00
El problema es que soy muy nuevo en PHP y no logro todavía pillarlo mucho. Alguien podría ayudarme en este tema? Lo necesito con urgencia y he estado buscando información en la web acerca de las imágenes como campo BLOB en mySQL y hay, en general, poca cosa ( por lo menos que yo haya visto ).

Gracias!
Título: Re: Extraer Imágenes Bmp Desde Mysql
Publicado por: Ithilien en Viernes 10 de Agosto de 2007, 20:22
Este es el codigo:

[CODE]
<html>
<head>
   <title>Ejemplo de PHP</title>
</head>
<body>
<?php

   if (!($link=mysql_connect("localhost","root","root")))
   {
      echo "Error conectando a la base de datos.";
      exit();
   }
   if (!mysql_select_db("mibd",$link))
   {
      echo "Error seleccionando la base de datos.";
      exit();
   }


$result = mysql_query("SELECT * FROM persona WHERE dni = 111111", $link);

echo "Nombre:    ".mysql_result($result, 0, "nombre")."<br>";

echo "Dirección:    ".mysql_result($result, 0, "domicilio")."<br>";

Header( "Content-type: image/bmp");
echo "Fotografia:    ".mysql_result($result, 0, "fotografia")."<br>";

mysql_close($link); //cierra la conexion
?>
</body>
</html>
[CODE]

Y aparece en el navegador esto:

Nombre: Pepe
Dirección: Calle Molinos 5

Warning: Cannot modify header information - headers already sent by (output started at C:\AppServ\www\hhh.php:6) in C:\AppServ\www\hhh.php on line 26
Fotografia: BM����6���(���y���
Título: Re: Extraer Imágenes Bmp Desde Mysql
Publicado por: Mollense en Viernes 10 de Agosto de 2007, 23:30
¿Que tal Ithilien?
El error
Citar
Warning: Cannot modify header information - headers already sent by (output started at C:\AppServ\www\hhh.php:7) in C:\AppServ\www\hhh.php on line 41
Se produce porque no podés modificar las cabeceras (Header) una vez que ya mandaste algo al navegador, por eso los caracteres raros en la pantalla, no podés abrir las etiquetas <html>, <body> y demás, ni siquiera puede haber un espacio en blanco antes de las etiquetas "<?php" para poder usar esta directiva. Por lo tanto, te paso un ejemplo que debería servirte, no se si sea la forma correcta de hacerlo pero funciona...

index.php
Código: Text
  1. &#60;html&#62;
  2.   &#60;head&#62;
  3.     &#60;title&#62;Ejemplo de PHP&#60;/title&#62;
  4.   &#60;/head&#62;
  5.   &#60;body&#62;
  6.   &#60;?php    
  7.     &#036;id=2;
  8.     if (!(&#036;link=mysql_connect(&#34;localhost&#34;,&#34;root&#34;,&#34;&#34;))){
  9.       echo &#34;Error conectando a la base de datos.&#34;;
  10.       exit();
  11.     }
  12.     if (!mysql_select_db(&#34;test&#34;,&#036;link)){
  13.       echo &#34;Error seleccionando la base de datos.&#34;;
  14.       exit();
  15.     }
  16.  
  17.     &#036;result = mysql_query(&#34;SELECT * FROM persona WHERE id = &#036;id&#34;, &#036;link);
  18.  
  19.     echo &#34;Nombre: &#34;.mysql_result(&#036;result, 0, &#34;nombre&#34;).&#34;&#60;br&#62;&#34;;
  20.  
  21.     echo &#34;Dirección: &#34;.mysql_result(&#036;result, 0, &#34;direccion&#34;).&#34;&#60;br&#62;&#34;;
  22.    
  23.     echo &#34;Fotografia:&#60;br/&#62;&#34;;
  24.     echo &#34;&#60;img src='imagen.php?id=&#036;id'/&#62;&#34;;
  25.  
  26.     mysql_close(&#036;link); //cierra la conexion
  27.   ?&#62;
  28.   &#60;/body&#62;
  29. &#60;/html&#62;
  30.  

imagen.php
Código: Text
  1. &#60;?php
  2.   &#036;id=&#036;_GET[&#34;id&#34;];
  3.   if (!(&#036;link=mysql_connect(&#34;localhost&#34;,&#34;root&#34;,&#34;&#34;))){
  4.     echo &#34;Error conectando a la base de datos.&#34;;
  5.     exit();
  6.   }
  7.   if (!mysql_select_db(&#34;test&#34;,&#036;link)){
  8.     echo &#34;Error seleccionando la base de datos.&#34;;
  9.     exit();
  10.   }
  11.  
  12.   &#036;result = mysql_query(&#34;SELECT imagen FROM persona WHERE id = &#036;id&#34;, &#036;link);
  13.  
  14.   Header( &#34;Content-type: image/bmp&#34;);
  15.   echo mysql_result(&#036;result, 0, &#34;imagen&#34;);
  16.  
  17.   mysql_close(&#036;link); //cierra la conexion
  18. ?&#62;
  19.  

PD: Los campos que estoy utilizando no son los mismos que los de tu DB.

Un saludo  :hola:
Título: Re: Extraer Imágenes Bmp Desde Mysql
Publicado por: Mollense en Viernes 10 de Agosto de 2007, 23:35
Porfa Ithilien, borra todos esos caracteres raros que el hilo se hace muy difícil de leer...

 :comp:
Título: Re: Extraer Imágenes Bmp Desde Mysql
Publicado por: Ithilien en Sábado 11 de Agosto de 2007, 00:34
Bendito seas Ángel!! Funciona a la perfección.

Lo primero es que ya he quitado los caracteres raros. Lo segundo, algo de eso leí, pero no acabo de entender donde estaba el problema. Quiero entender que indico lo de modificar el HEADER despues de mostrar el nombre y la dirección.

Bueno, el caso es que ya funciona a la perfección. Estaba bastante preocupado y quería agradecértelo mucho porque me has solucionado un quebradero de cabeza que llevaba ya con él varios días.

GRACIAS DE NUEVO!

P.D.: Estoy acabando mi Proyecto Fin de Carrera y esta parte la acabo de empezar y como no es mucho, era lo que más problemas podría darme así que por eso estoy tan contento. Saludos!
Título: Re: Extraer Imágenes Bmp Desde Mysql
Publicado por: Mollense en Sábado 11 de Agosto de 2007, 07:02
Me alegra haberte ayudado Ithilien  :)
En cuanto a tu duda, te comento que en tu código existían dos errores básicos:

El primero es que estabas tratando de enviar una cabecera (mediante Header(...)) de manera incorrecta ya que con anterioridad estabas enviado etiquetas HTML y cadenas de caracteres (mediante echo's) cosa que no se puede hacer. Para mas info ver acá (http://www.php-es.com/function.header.html).

El segundo es que si de todas formas pudieras haber mandado esa cabecera estarías especificando que el contenido de dicha página es una imagen ("Content-type: image/bmp") y en realidad el contenido de tu página vendría a ser una mezcla de etiquetas HTML, cadenas y una imagen. Un clericó  :rolleyes: .Fijate en que en el ejemplo que te pasé en la página "imagen.php" especifico la cabecera y el único contenido que envío es la imágen. De esta manera puede referenciarse como si la página fuese una imagen en el atributo src de una etiqueta <img>.-

Espero haberme explicado.

Un saludo y suerte con eso :beer:
Título: Re: Extraer Imágenes Bmp Desde Mysql
Publicado por: Ithilien en Sábado 11 de Agosto de 2007, 10:07
Ahora lo entiendo a la perfección. Muchísimas gracias de nuevo  :rolleyes:
Título: Re: Extraer Imágenes Bmp Desde Mysql
Publicado por: Mollense en Domingo 12 de Agosto de 2007, 05:56
Cita de: "Ithilien"
Ahora lo entiendo a la perfección. Muchísimas gracias de nuevo  :rolleyes:
Por nada compa :beer: