Foros del Web » Programando para Internet » PHP »

Mostrar una imagen guardada en base de datos en binario

Estas en el tema de Mostrar una imagen guardada en base de datos en binario en el foro de PHP en Foros del Web. Hola, Tengo un problema para mostrar una imagen guardada en binario en una base de datos MySQL. He leído por completo el minitutorial de Cluster ...
  #1 (permalink)  
Antiguo 23/09/2009, 03:47
 
Fecha de Ingreso: junio-2009
Mensajes: 8
Antigüedad: 14 años, 10 meses
Puntos: 0
Mostrar una imagen guardada en base de datos en binario

Hola,

Tengo un problema para mostrar una imagen guardada en binario en una base de datos MySQL. He leído por completo el minitutorial de Cluster y los mensajes de otros usuarios con problemas similares al mio. Mi caso es el siguiente:

En mi caso la imagen no está en una tabla aislada sino que es un campo más de una tabla que contiene otros datos. Quiero decir que no necesito guardar el peso, el tipo, etc. de la imagen, solo su propio contenido en binario. Cuando muestro la imagen no llamo a otro .php como hace Cluster sino que en un bucle while la guardo en una casilla del array con un mysql_fetch_array(). Cluster lo hace con mysql_fetch_assoc(). Cuando uso la etiqueta <img> y el 'echo' para mostrar la imagen me sale el cuadro de imagen no encontrada y la imagen en binario (símbolos raros). Esto quiere decir que uno de los problemas que tengo es con las cabeceras. También probé en un archivo diferente como lo hace Cluster y nada. No os pongo el código porque lo he hecho de dos o tres formas y en todas me sale el mismo problema. Aunque si con el mensaje no os aclaráis mucho puedo poner algo de lo que he probado.

Os hago un par de preguntas que creo que pueden estar relacionadas con el fallo.
¿Es imprescindible que las cabeceras estén en otro archivo diferente al de listar las imágenes?
¿Es imprescindible usar mysql_result() para leer el campo imagen (en el caso de Cluster el campo "archivo_binario") de la base de datos?.

Si necesitais más información pedídmela.

Os agradezco la ayuda.
  #2 (permalink)  
Antiguo 23/09/2009, 09:49
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Mostrar una imagen guardada en base de datos en binario

Sí, tienes que usar un archivo aparte y mandarlo a llamar en tu ciclo while, por ejemplo:
Código PHP:
Ver original
  1. while ($row = mysql_fetch_array($result)) {
  2.          // imprimes todos tus datos
  3.          echo '<img src="imagen.php?id=' . $row['id'] . '" border="0" />';
  4. }

En imagen.php recibes el id por $_GET y haces otra consulta a la base de datos, extraes el contenido binario (aunque sea de la misma tabla) y la imprimes con las cabeceras correctas.

Saludos.
  #3 (permalink)  
Antiguo 28/09/2009, 03:50
 
Fecha de Ingreso: junio-2009
Mensajes: 8
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Mostrar una imagen guardada en base de datos en binario

Pues no me funciona, lo he intentado hacer así pero no me funciona. Pongo el código:

Base de datos:

postid int(5) primary unsigned key.........
.............
.............
............. Otros campos que no tienen que ver con la imagen
.............
imagen blob null

Esto es lo que más se diferencia del minitutorial de Cluster ya que la imagen no tiene base de datos propia sino que es un campo más de una BD. Aunque esa BD sí que tiene un campo ID.

tablon.php

while ($fila = mysql_fetch_array($result)) {
.
.
.
if ($fila['imagen'] != "")
{

echo '<img src="ver_imagen.php?id=' . $fila['postid'] . '" border="0" />';

}
.
.
.
.
}

ver_imagen.php

<?php

if(isset($_GET['id'])) {

$sql = "SELECT imagen FROM tarjeta WHERE postid='".$_GET['id']."'";
$consulta_imagen = mysql_query($sql,$conexion);
$datos = mysql_result($consulta_imagen,0,"imagen");
header("Content-type: image/pjpeg");
echo $datos;

}

?>

Por lo menos ya no salen los símbolos raros así que parece que las cabeceras están bien puestas. Pero no se ve la imagen. Sale el icono de "imagen no encontrada" en el navegador.

Gracias por la ayuda.
  #4 (permalink)  
Antiguo 28/09/2009, 10:26
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Mostrar una imagen guardada en base de datos en binario

Dale boton derecho al cuadro y selecciona ver Imagen esto va a abrir la imagen en el navegador, y en caso de que haya un error te va a mostrar el error en lugar de la imagen.

Saludos.
  #5 (permalink)  
Antiguo 29/09/2009, 04:31
 
Fecha de Ingreso: junio-2009
Mensajes: 8
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Mostrar una imagen guardada en base de datos en binario

Pues no sale nada. He hecho lo que me has dicho pero no sale ningún mensaje de error. No sé si ver_imagen.php llega a ejecutarse siquiera.
  #6 (permalink)  
Antiguo 29/09/2009, 08:43
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Mostrar una imagen guardada en base de datos en binario

Comenta el header() para que te muestre el texto, por lo que veo en tu code no veo donde hayas definido $conexion.

Saludos.
  #7 (permalink)  
Antiguo 30/09/2009, 06:42
 
Fecha de Ingreso: junio-2009
Mensajes: 8
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Mostrar una imagen guardada en base de datos en binario

Hola,

He comentado el header() y nada. De hecho he comentado ver_imagen.php entero y no pasa nada, se queda todo igual, por eso digo que dudo si ver_imagen.php llega a ejecutarse al llamarlo en la etiqueta de imagen.

$conexion está definido en tablon.php, el fichero donde está la etiqueta de la imagen. Lo he puesto también en ver_imagen.php a ver si es que se cortaba la conexión con la base de datos pero se queda todo igual.

Solo puedo decir que le he dado a Botón derecho->Propiedades en la imagen rota y donde sale el nombre del fichero sale "ver_imagen.php?id=19",es decir, el código de llamada, cosa que veo lógica, pero al no ser un .jpg es por lo que sale el icono de imagen rota. Pero tampoco sale en ningún momento el contenido de $datos que es lo que tendría que salir en lugar de la imagen rota.
  #8 (permalink)  
Antiguo 30/09/2009, 12:06
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Mostrar una imagen guardada en base de datos en binario

Por eso te comentaba ejecuta ese código directo en el browser copia la ruta completa y la abres en una pagina.

Saludos.
  #9 (permalink)  
Antiguo 01/10/2009, 05:06
 
Fecha de Ingreso: junio-2009
Mensajes: 8
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Mostrar una imagen guardada en base de datos en binario

Hola,

Bueno, pues ya funciona. Aislé el código tal y como me dijiste y funcionó. Pero después lo probé tal y como era y también funcionó.

Esto me lleva a comentar dos cosas. Primero: la conexión a la base de datos también tiene que estar en ver_imagen.php

Y lo segundo. Después de leer mensajes y mensajes, y mensajes, y mensajes....................de gente que le pasaba lo mismo que a mi y ya que el código de Cluster funcionaba pensé en que el error pudiera venir por otro lado. Y efectivamente, creo que por una cuestión de privilegios y seguridad el mysql_result() no se ejecutaba. Así que creé un nuevo usuario en el servidor MySQL.

Pero no me acuerdo de que hice primero así que no sé exactamente de donde venía el error. Tendría que ser de alguna de esas dos cosas. O de las dos. Cambié tantas cosas que ya no lo sé. Pero bueno, lo importante es que ya funciona.

Gracias por todo GatorV.
  #10 (permalink)  
Antiguo 01/10/2009, 10:28
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Mostrar una imagen guardada en base de datos en binario

De hecho tendría que ser lo primero, necesitas definir la conexión a MySQL en cada script que vaya a accesar.

Saludos.
  #11 (permalink)  
Antiguo 01/10/2009, 11:08
Avatar de pepeverastegui  
Fecha de Ingreso: septiembre-2008
Ubicación: Pedernales, Michoacan
Mensajes: 82
Antigüedad: 15 años, 7 meses
Puntos: 2
Respuesta: Mostrar una imagen guardada en base de datos en binario

y por qeu la imagen no la guardas en un campo de tipo LONGBLOB en la base de datos

obtienes el archivo, le haces un fread le pones un base64_encode, lo guardas al campo LONGBLOB y cuando lo quieres imprimir le haces un base64_decode pa que quede como el original y luego imprimes el valor y list

ten cuidado con el header("content-type:");

que asi es una imagen ps debes de poner que tipo jpg png blablabla
__________________
Ing. Jesus Verastegui
http://www.micharanga.com.mx
http://pepeverastegui.blogspot.com
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 17:44.