Foros del Web » Programando para Internet » PHP »

Problemas al leer una imagen guardada en una base de datos

Estas en el tema de Problemas al leer una imagen guardada en una base de datos en el foro de PHP en Foros del Web. Hola. Tengo un script (remodelado por mi) (original by cluster ) que me permite que el usuario guarde una imagen en la base de datos ...
  #1 (permalink)  
Antiguo 26/06/2003, 04:23
 
Fecha de Ingreso: diciembre-2002
Mensajes: 52
Antigüedad: 21 años, 4 meses
Puntos: 0
Problemas al leer una imagen guardada en una base de datos

Hola. Tengo un script (remodelado por mi) (original by cluster ) que me permite que el usuario guarde una imagen en la base de datos para que luego pueda ser visionada con su perfil.
El codigo de donde se ve la imagen es este:
Código PHP:
<?php


    
    $conexion
=mysql_connect("localhost","eluser","elpass") or die ("no se ha podido conectar a la BD");

    
mysql_select_db("ladb") or die ("no se ha podido seleccionar la BD");

    
$sql "SELECT imagen_binario,imagen_tipo FROM registrados WHERE id='$idl' ";

    
$consulta mysql_query($sql,$conexion);

    
$datos mysql_result($consulta,0,"imagen_binario");
    
$tipo mysql_result($consulta,0,"imagen_tipo");
header("Content-type: $tipo");


    echo 
$datos;


?>
El Id viene dado por xxx.php?idl=nºid

Y mi da este error:

Warning: Cannot add header information - headers already sent by (output started at /home/ultima/public_html/bf1942spain/perfil.php:7) in /home/ultima/public_html/bf1942spain/perfil.php on line 305
ÿØÿàJFIFddÿìDucky ÿî!AdobedÀü!ÿÛ„''1%%1-&%%&-<44444


La linea 305 es:

Código PHP:


header
("Content-type: $tipo"); 
si quito esa linea me salen muchas letras y numeros raros donde tendria que aparecer la imagen.


Hay alguna forma de solucionar esto? (otro script o arreglando el codigo).




Espero vuestra respuesta
__________________
Webmaster DE :

http://www.bf1942spain.com
  #2 (permalink)  
Antiguo 26/06/2003, 04:32
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,

El "fallo" esta en la linea 7 de perfil.php, donde te dice que has mandado contenido al navegador. Cuando envias el primer contenido al navegador, se envian antes las cabeceras y luego no se pueden enviar mas cabeceras (via header(), por ejemplo) despues del contenido. Contenido puede ser HTML, echos o espacios en blanco.

Pon el codigo de la linea 7 y contiguas si no ves que estes enviando contenido.

Por cierto, esos caracteres son el contenido de la imagen, lo que pasa es que como no le has dicho al navegador que tipo de datos son (via content-type), este intenta mostrarlo como texto.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #3 (permalink)  
Antiguo 26/06/2003, 04:36
 
Fecha de Ingreso: diciembre-2002
Mensajes: 52
Antigüedad: 21 años, 4 meses
Puntos: 0
la linea 7 contiene esto:
Código PHP:
<SCRIPT language=JavaScript type=text/JavaScript
Y le sigue esto:
Código PHP:
<!--
function 
MM_reloadPage(init) {  //reloads the window if Nav4 resized
  
if (init==truewith (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
    
document.MM_pgW=innerWidthdocument.MM_pgH=innerHeightonresize=MM_reloadPage; }}
  else if (
innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgHlocation.reload();
}
MM_reloadPage(true);
//-->
</SCRIPT> 
__________________
Webmaster DE :

http://www.bf1942spain.com
  #4 (permalink)  
Antiguo 26/06/2003, 04:38
 
Fecha de Ingreso: diciembre-2002
Mensajes: 52
Antigüedad: 21 años, 4 meses
Puntos: 0
ahora he probado a kitar eso y me pone line:9

Ahi otra alternativa a esa?



la linea 9 es la de Title



Otro codigo?
__________________
Webmaster DE :

http://www.bf1942spain.com
  #5 (permalink)  
Antiguo 26/06/2003, 04:48
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
El problema es que no has entendido como funciona esto. Si quieres mostrar la imagen no debes sacar nada mas, ni HTML ni nada. Solo los datos de la imagen. El para meter la imagen dentro de HTML tienes que hacer:

<img src="script_muestra_imagen.php?id=123">

y script_muestra_imagen.php solo tiene el codigo de leer de la BD el campo de la imagen, las cabeceras header() y echo del campo. SOLO eso.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #6 (permalink)  
Antiguo 26/06/2003, 04:49
 
Fecha de Ingreso: diciembre-2002
Mensajes: 52
Antigüedad: 21 años, 4 meses
Puntos: 0
ah ok es ke yo lo convinaba con perfil etc
__________________
Webmaster DE :

http://www.bf1942spain.com
  #7 (permalink)  
Antiguo 26/06/2003, 20:57
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Pues .. oscar2000 .. si te fijas en el código original y los ejemplos que puse, .. la forma de llamar al script que obtiene la imagen y la envia al navegador es como te ha comentado josemi.

Cuando llames a tu dato de tu perfil "imagen" tienes que hacer una llamada a tu script que generar la imagen partiendo del "ID" de ese perfil o lo que uses bajo un <tag> de imagen ..

Todo esto se basa en las cabeceras HTTP .. Si al navegador le "dices" que vas a enviar una imagen en tal formato/tipo .. así la espera para interpretarla .. Si no le dices nada (por defecto asume que le envias texto plano ..) y para eso tenemos el tag HTML de <img ...> para llamar a imagenes (content-type: image/???) (o "binarios" en general ..)

Un aludo,

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #8 (permalink)  
Antiguo 29/01/2005, 17:29
 
Fecha de Ingreso: febrero-2004
Mensajes: 1.987
Antigüedad: 20 años, 2 meses
Puntos: 22
Llevo buen rato buscandolo y no lo encuentro:

#############
CLUS dice: "y los ejemplos que puse..."
#############

Donde esta ese post que no lo veo!.

Salu2!.
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 14:06.