PHP - No me muestra blob guardado en base de datos

   
Vista:

No me muestra blob guardado en base de datos

Publicado por Matias (14 intervenciones) el 05/09/2014 23:52:53
Hola gente, como va?

Tengo un problema para mostrar una imagen guardada como blob en la base de datos.

El script que llamo para mostrar la imagen es el siguiente:

1
2
3
$parrafo = getParrafo($_GET["id_parrafo"]);
header("Content-type: " . $parrafo["tipo_imagen_parrafo"]);
echo $parrafo["archivo_imagen_parrafo"];

La inclusion a la base de datos la hice de tres maneras distintas:

- Manualmente con phpmyadmin.
- De esta forma:

1
$consulta = "UPDATE parrafo SET archivo_imagen_parrafo = '" . file_get_contents($_FILES["imagen_parrafo"]["tmp_name"]) . "', tipo_imagen_parrafo = '" . $_FILES["imagen_parrafo"]["type"] . "' WHERE id_parrafo = '" . $idParrafo . "'";

- Y de esta otra forma:

1
$consulta = "UPDATE parrafo SET archivo_imagen_parrafo = '" . base64_encode(file_get_contents($_FILES['imagen_parrafo']['tmp_name'])) . "', tipo_imagen_parrafo = '" . $_FILES["imagen_parrafo"]["type"] . "' WHERE id_parrafo = '" . $idParrafo . "'";

Ninguna de estas formas me funciona, pero todas guardan correctamente el contenido, por lo menos es lo que se ve en phpmyadmin.

Tengo entendido que esto no es para nada dificil, sin embargo no logro hacer mostrar la imagen. Hice exactamente lo mismo con un sonido mp3, y funciono perfectamente, por lo que no me cierra que no se puede mostrar la imagen.

Tambien me fijo en firebug y me llega un response 200 OK, y me devuelve el peso exacto guardado del archivo, lo que es mas raro todavia.

Me falta guardarlo de alguna manera especial, como con real_escape_string, addslashes, o algo por el estilo? Puede ser tambien que haya una extension en php que no este activada, y por lo tanto no me deja hacer esto? Utilizo wamp, con php 5.

Cualquier cosa me pueden preguntar.
Muchas gracias de antemano.
Un saludo.
Editar/Borrar Mensaje
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve

No me muestra blob guardado en base de datos

Publicado por xve (5518 intervenciones) el 07/09/2014 09:26:15
Hola Matias, has probado a utilizar mysqli_real_escape_string()... algo así:

1
$consulta = "UPDATE parrafo SET archivo_imagen_parrafo = '" . mysqli_real_escape_string(file_get_contents($_FILES['imagen_parrafo']['tmp_name'])) . "', tipo_imagen_parrafo = '" . $_FILES["imagen_parrafo"]["type"] . "' WHERE id_parrafo = '" . $idParrafo . "'";

Coméntanos, ok?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

No me muestra blob guardado en base de datos

Publicado por Matias (14 intervenciones) el 08/09/2014 01:25:58
Hola xve, gracias por tu respuesta.

Agregue la funcion mysqli_real_escape_string(), pero sigue sin funcionar. Me da response 200 OK y me envia datos con el tamaño de la imagen. Pero no logro hacerla ver.

La verdad no se que puede ser, siendo que esto es una cosa muy simple, y no logro encontrar ayuda.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

No me muestra blob guardado en base de datos

Publicado por xve (5518 intervenciones) el 08/09/2014 08:00:23
Hola Matias, pero en la base de datos se ha guardado correctamente?

Cuando llamas a la pagina que muestra la imagen, que te aparece en pantalla?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

No me muestra blob guardado en base de datos

Publicado por Matias (14 intervenciones) el 08/09/2014 13:21:39
Hola xve.

Asumo que se guarda bien en la base de datos, ya que al hacer la consulta de los datos guardados, hago un file_put_contents(), y me crea bien el archivo de la imagen, por lo que la forma de guardarlo no parece ser el problema.

Luego, cuando llamo al script para mostrar la imagen, no me muestra nada salvo el cuadradito de "imagen rota", como si hubiera puesto mal la url, y al hacer click derecho y "ver imagen", me sale que "la imagen no se puede mostrar porque contiene errores".

El script donde llamo a la imagen es esto:

<?

include("main.php"); //Conexion a la base de datos, etc.

$parrafo = getParrafo($_GET["id_parrafo"]);
header("Content-type: " . $parrafo["tipo_imagen_parrafo"]);
echo $parrafo["archivo_imagen_parrafo"];

?>

Gracias.
Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

No me muestra blob guardado en base de datos

Publicado por xve (5518 intervenciones) el 08/09/2014 18:49:33
Haz una prueba Matias, comenta la linea:
1
#header("Content-type: " . $parrafo["tipo_imagen_parrafo"]);

De esta manera, tendrás que ver el binario de la imagen.


Una cosa que no te he preguntado... entiendo que el campo de la base de datos es un campo del tipo binario, verdad?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

No me muestra blob guardado en base de datos

Publicado por Matias (14 intervenciones) el 08/09/2014 19:53:02
Hola xve. Gracias por tu respuesta.

Comente la linea que me dijiste y efectivamente, me muestra el binario de la imagen, o por lo menos un texto larguisimo indescifrable.

Y con respecto a la base, el tipo que le puse al campo en la tabla es "mediumblob".

Un saludo.
Matías.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

No me muestra blob guardado en base de datos

Publicado por xve (5518 intervenciones) el 08/09/2014 21:23:14
Hola Matias, creo que esta todo perfecto... La verdad es que no entiendo porque no te funciona...

Si me adjuntas los archivos con la estructura de la base de datos, le hecho un vistazo para ver donde esta el error.
Has revisado este simple código:
http://www.lawebdelprogramador.com/codigo/PHP/70-Guardar_y_mostrar_una_imagen_de_una_base_de_datos_MySQL.html

Ahí se ve muy claro como se utiliza.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

No me muestra blob guardado en base de datos

Publicado por Matias (14 intervenciones) el 09/09/2014 00:55:05
Hola xve. Te adjunto unos archivos:

- Un sql con la estructura de la tabla "parrafo"
- El modelo donde se llama a la funcion que guarda el archivo en la base de datos.
- El script externo que te muestra la imagen.

La verdad que es muy raro que no funcione, y muy frustrante tambien. A esta altura no se que hacer ya. Y mas raro todavia es que primero lo hice con sonido, practicamente las mismas funciones, y funciono perfecto.

Puede ser algo del servidor? La cofiguracion de apache o php?

Cualquier cosa me podes consultar sin problemas.

Muchas gracias por tu ayuda.
Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

No me muestra blob guardado en base de datos

Publicado por xve (5518 intervenciones) el 09/09/2014 09:24:02
Hola Matias, gracias por enviarnos el código, pero con lo que nos has mandado, no puedo probar-lo... simplemente me has adjuntado el código que previamente nos has mostrado.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

No me muestra blob guardado en base de datos

Publicado por Matias (14 intervenciones) el 09/09/2014 15:19:18
Hola xve.

Disculpame, ahora te paso todos los archivos necesarios para que funcione. Pasa que esta en modelo-vista-controlador.

Si tenes una direccion de email para mandarte todo, en vez de hacerlo por aca.

Muchas gracias.
Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

No me muestra blob guardado en base de datos

Publicado por Matias (14 intervenciones) el 15/09/2014 16:23:24
Hola como estas?

No se si te habra llegado el mensaje anterior. ¿Me queres pasar un email y te paso los archivos por ahi? ¿O los subo directamente aca?

Muchas gracias.
Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

No me muestra blob guardado en base de datos

Publicado por xve (5518 intervenciones) el 15/09/2014 17:11:13
Perdona Matias, no había visto el mensaje... Si me los cuelgas en el foro mucho mejor.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

No me muestra blob guardado en base de datos

Publicado por Matias (14 intervenciones) el 15/09/2014 17:53:11
Hola xve.

Intente subir un archivo comprimido, pero no me deja, ni zip ni rar, no se porque.

Te dejo mi email, matiasc1986@gmail.com. Mandame un email y te envio los archivos.

Te agradezco mucho la ayuda.
Un saludo.
Matias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

No me muestra blob guardado en base de datos

Publicado por xve (5518 intervenciones) el 15/09/2014 21:34:46
Hola Matias, hay un limite de tamaño en los archivos... si pasa creo que de 2Mb no lo puedes subir, pero si que puede subir varios archivos inferiores a 2 mb.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

No me muestra blob guardado en base de datos

Publicado por Matias (14 intervenciones) el 15/09/2014 21:40:47
Ahhhh que raro, porque es un rar de 350 kb.

Lo subi a mediafire, aca dejo el link: http://www.mediafire.com/download/x80gheghj9so5b5/pruebablob.rar

Es un backend hecho en MVC, por lo que son varios archivos.

Basicamente tenes "misiones", donde cada una tiene una "aventura" correspondiente, y a la vez cada "aventura" esta formada por varios "parrafos".

Parra entrar al sistema, podes poner "usuario" y "usuario". En el menu "aventuras de texto", hace click en modificar, que te lleva a los "parrafos" que conforman la "aventura" de esa mision. Vas a ver 2 parrafos. El primero ya tiene una imagen y un sonido cargados (cuando haces click en editar), por lo que ya podes ver que la imagen no carga, pero el sonido si. Si haces click en eliminar y volves a "editar" vas a poder cargar de nuevo una imagen o un sonido correspondiente a ese "parrafo".

El archivo donde se muestra la imagen esta en "app/_imagen_parrafo.php". Lo mismo con el de sonido. El archivo donde se guarda la imagen en la base de datos es "ParrafoModelo.php", en la funcion agregarImagenParrafo(). La base de datos se llama "pruebablob".

No es mucho mas que eso. El resto no es importante.

Cualquier cosa me podes consultar sin problemas.

Te agradezco mucho la ayuda.
Un saludo.
Matias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

No me muestra blob guardado en base de datos

Publicado por Matias (14 intervenciones) el 16/09/2014 17:19:01
Hola xve.

Queria saber si pudiste bajar los archivos.

Gracias.
Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

No me muestra blob guardado en base de datos

Publicado por xve (5518 intervenciones) el 17/09/2014 09:20:14
Hola Matias, perdona por el retraso, pero buscaba un ratito para probarlo.

Ahora mismo lo he probado, pero tu código la verdad es un poco complicado, ya que no dispongo de la base de datos entera, y tus paginas php a mi no me funcionan, ya que abres el código php con <? y mi php no lo detecta, tiene que ser así <?php

también he visto que en varios sitios de tu código, pones los datos de conexion a la base de datos, lo cual tendria que modificar varias paginas...

Al final, y por no dedicarle mucho tiempo, lo he hecho a mano, y me ha funcionado perfectamente.

este es el contenido del archivo _imagen_parrafo.php, el cual funciona perfectamente:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
$bd = "test";
$usuario = "all";
$contrasena = "all";
 
$conexion = mysqli_connect("localhost", $usuario, $contrasena, $bd);
 
$consulta = "SELECT * FROM parrafo WHERE id_parrafo=2";
 
$resultado =  mysqli_query($conexion, $consulta);
$fila = mysqli_fetch_assoc($resultado);
 
header("Content-type:".$fila["tipo_imagen_parrafo"]);
// header('Content-Disposition: attachment; filename="imagen.jpg"');
 
echo $fila["archivo_imagen_parrafo"];
 
?>

Quiero pensar, que si tu código funciona correctamente, debería de mostrarte la imagen, ya que lo unico que yo he realizado, ha sido hacerlo todo sin pasar por tus clases.

Te adjunto en un archivo, el registro de la base de datos, para que lo puedas probar, no vaya a ser un problema de la imagen guardada en la misma.

Ya nos comentaras.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

No me muestra blob guardado en base de datos

Publicado por Matias (14 intervenciones) el 17/09/2014 12:09:26
Hola xve.

La verdad me parece rarisimo. Pero puede ser que el error sea porque esta hecho con clases. Vaya uno a saber el por qué.

Voy a probar hacerlo de la manera que lo hiciste, manualmente, y te comento si funciono.

Muchisimas gracias por la ayuda.
Un saludo.

Matías.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

No me muestra blob guardado en base de datos

Publicado por xve (5518 intervenciones) el 17/09/2014 21:33:17
La manera que yo he dado con los errores de base de datos y demás, es ir poniendo exit("xxx"); por el código, hasta poder ver donde estaba el problema.

Al poner el header("Content-type:".$fila["tipo_imagen_parrafo"]); los errores no se visualizan correctamente.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

No me muestra blob guardado en base de datos

Publicado por Matias (14 intervenciones) el 19/09/2014 01:01:57
Hola xve.

Te cuento que no anduvo. Utilice tu codigo en el frontend, que es el otro lugar donde tengo que mostrar la imagen, y no anduvo. Hice todo directamente, sin pasar por clases o nada parecido.

La verdad no se que puede ser, sobretodo teniendo en cuenta que funciona a la perfeccion con los sonidos, lo que lo hace mas frustrante todavia.

Algo que note es que en firefox hace dos peticiones al archivo _imagen_parrafo.php. En las dos recibe un 200 OK y el peso exacto del archivo. No se si tendra algo que ver pero te adjunto una imagen de firebug mostrando esto. Por otro lado, en Opera no hace esto.

Otra cosa es que probe la funcion file_put_contents() para ver si me crea el archivo y funciona perfectamente, por lo que no creo que sea que se haya guardado mal en la base de datos.

La verdad no se que puede ser. No se me ocurre mas nada. Puede ser que tenga que ver con apache o php? Tendria que actualizar wamp? Alguna extension particular de php? Vos que version de apache y php tenes?

Si queres podes hacer funcionar los archivos que te mande activando la opcion "short open tag" en la configuracion de php. Con eso ya podes utilizar <? para abrir archivos php.

Muchas gracias.
Un saludo.
Matias.

firebug
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

No me muestra blob guardado en base de datos

Publicado por xve (5518 intervenciones) el 19/09/2014 08:20:19
Hola Matias, el código que yo te adjunte, funciona perfectamente, yo lo he probado y me ha funcionado con la imagen que te adjunte en el archivo.

Lo único que se me ocurre, es que no se guarde correctamente la imagen... has probado la imagen que yo te adjunte?

No creo que tenga nada que ver la versión del PHP ni del Apache... esto de las imágenes se puede hacer desde hace muchos años.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

No me muestra blob guardado en base de datos

Publicado por Matias (14 intervenciones) el 19/09/2014 18:03:15
Hola xve.

Si, he probado tu codigo con tu base de datos y la imagen que tenia dentro.

Lo que decis de que se haya guardado mal en la base de datos, no puede ser si poniendo file_put_contents() me crea la imagen perfectamente. ¿O puede suceder igual?

La unica que queda seria que puedas probar el codigo que te mande, asi si te funciona bien, es porq es algo de mi pc, y si funciona mal puedas ver el error.

Un saludo.
Matias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

No me muestra blob guardado en base de datos

Publicado por Matias (14 intervenciones) el 02/10/2014 02:52:50
Hola xve.

He encontrado la solucion.

Al parecer en el archivo donde llamo a la imagen, asi como el archivo donde tengo las funciones, "_imagen_parrafo.php" y "_principal.php" respectivamente, tenia que sacar el espacio anterior a la apertura de codigo php, o sea "<?". No tiene que haber espacio por encima de la llamada, similar a cuando haces un session_start(). El resto esta perfecto.

Y eso era todo.

Por fin pude solucionarlo. Muchas gracias por tu ayuda.

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

No me muestra blob guardado en base de datos

Publicado por xve (5518 intervenciones) el 02/10/2014 09:19:19
Hola Matias, gracias por compartirlo!!!

La verdad es que ya no sabia que mas hacer...;)

Felicidades por haberlo encontrado!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar