Foros del Web » Programando para Internet » PHP »

Problemas al mostrar imagen guardada en mysql

Estas en el tema de Problemas al mostrar imagen guardada en mysql en el foro de PHP en Foros del Web. Hola, tengo una imagen guardada en mi base de datos en un campo mediumblob, y tambien guarde el tipo de imagen en un varchar. voy ...
  #1 (permalink)  
Antiguo 07/01/2009, 21:13
 
Fecha de Ingreso: enero-2009
Mensajes: 7
Antigüedad: 15 años, 3 meses
Puntos: 0
Exclamación Problemas al mostrar imagen guardada en mysql

Hola, tengo una imagen guardada en mi base de datos en un campo mediumblob, y tambien guarde el tipo de imagen en un varchar. voy las tablas directamente en mysql y efectivamente la imagen esta cargada asi que por eso no hay problema, el problema esta a la hora de mostrar esas imagenes.

tengo una aplicacion en la cual muestro los datos de un articulo, entre ellos la referencia el nombre etc... y tengo un link que se llama "Ver Imagen", el cual me envia a una pagina llamada mostImagen.

****Pagina mostrarArti****

Esta pagina muestra los datos del articulo en una tabla y el link paar ver la imagen

Código PHP:
<?php
require_once('conexion.php');

$ref=$_POST["ref"];
$tip=$_POST["tipo"];

if(
ref!=NULL)
{
  
$consulta="SELECT tipo FROM articulo WHERE refArticulo='$ref'";
  
$resp=mysql_query($consulta);
  
$dato=mysql_fetch_array($resp);
  if(
$dato)
   
$tip=$dato["tipo"];
     
}
 
 
if(
$tip!=NULL)
{
   if (!isset(
$pag)) 
   
$pag 1// $pg es la pagina actual 
 
   
$cantidad=10// cantidad de resultados por página 
   
$inicial $pag $cantidad
   
$result mysql_query("SELECT COUNT(*) FROM articulo"); 
list(
$total) = mysql_fetch_row($result);
$tampag 10;
$reg1 = ($pag-1) * $tampag;
$result mysql_query("SELECT * FROM articulo WHERE tipo='$tip'
  LIMIT $reg1, $tampag"
); 

   
$sql="SELECT * FROM articulo WHERE tipo='$tip'";
   
$result=mysql_query($sql);
   if (
mysql_num_rows($result)){ 
   echo 
"<table align='center' bgcolor= '#006699' cellpadding=10 cellspacing=2 border=1>"// Comenzamos la tabla antes del ‘while’
echo "<tr><th>Referencia</th><th>Nombre</th><th>Talla</th><th>Color</th><th>Stock Max.</th><th>Stock Min.</th><th>Cant Disp</th><th>Precio Venta</th><th>Precio Compra</th><th>Imagen</th></tr>"// Así escribimos la cabecera de la tabla
  
while ($row = @mysql_fetch_array($result))
{
  
$ref=$row["refArticulo"];
  
$name=$row["nombre"];
  
$talla=$row["talla"];
  
$color=$row["color"];
  
$smin=$row["cantMinDep"];
  
$smax=$row["cantMaxDep"];
  
$cant=$row["cantDisp"];
  
$pc=$row["precVenta"];
  
$pv=$row["precCompra"];
echo 
"<tr><td>$ref</td>"// Comenzamos una fila (<tr>)
echo "<td>$name</td>";
echo 
"<td>$talla</td>";
echo 
"<td>$color</td>";
echo 
"<td>$smin</td>";
echo 
"<td>$smax</td>";
echo 
"<td>$cant</td>";
echo 
"<td>$pc</td>";
echo 
"<td>$pv</td>";
echo 
"<td><a href=mostImagen.php?id=$ref>Ver Imagen</a></td></tr>"// [/SIZE][/SIZE]Acabamos una fila (</tr>)
}
echo 
"</table>"// Fin de la tabla.
  
$total_paginas ceil($total/$cantidad);
  
$anterior $pag 1;
  
$posterior $pag1;
  
$enlace="mostrarArti.php?pag=";
  
  if (
$pag>1)
    echo 
"<a href=\"$enlace$anterior\">&laquo;</a> ";
  else
    echo 
"<b>&laquo;</b> ";
  for (
$i=1$i<$pag$i++){
   echo 
"<a href=\"$enlace$i\">$i</a> ";
  echo 
"<b>$pag</b> ";}
  for (
$i=$pag+1$i<=$total_paginas$i++)
    echo 
"<a href=\"$enlace$i\">$i</a> ";
  if (
$pag<$total_paginas)
    echo 
"<a href=\"$enlace$posterior\">&raquo;</a>";
  else
    echo 
"<b>&raquo;</b>";
    }
}
else
 echo
"<script>alert ('Registro  no encontrado en la Base de Datos');
           </script>"
;


    
?>
****mostImagen.php*****
esta pagina hace todo lo relacionado con la extraccion del registro de la imagen en la bd

Código PHP:
<?php
require_once('conexion.php');
$id = (isset($_GET["id"])) ;
$result mysql_query("SELECT Imagen, tipoIm FROM articulo WHERE identificacion='$id'");
$Imagen=@mysql_result($res0"Imagen");
$tipo=@mysql_result($res0"tipoIm");
header("Content-Type:$tipo");
echo 
$Imagen;
?>
***verFoto.php****
esta pagina se supone debe mostrar la foto

Código HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Documento sin t&iacute;tulo</title>
</head>

<body>
<img src="verFoto.php" height="100" width="120">

</body>
</html> 
el problema esta en que cuando voy a ejecutar me aparece el siguiente warning, y no aparece la magen

Warning: Cannot modify header information - headers already sent by (output started at C:\AppServ\www\Almacen\menu\mostImagen.php:6) in C:\AppServ\www\Almacen\menu\mostImagen.php on line 11



Por favor espero haberme hecho entender, la verdad es que no tengo mucha experiencia en esto de las imagenes en mysql, y lo necesito con urgencia
  #2 (permalink)  
Antiguo 07/01/2009, 21:29
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Problemas al mostrar imagen guardada en mysql

espero este quick ejemplo te ilustre el detalle...

Código HTML:
<img src="foo.php?img=13"/> 
¿¿entiendes como funciona la técnica??


debes enviar, únicamente datos binarios (la imagen) a un "contenedor" para tal.... osea, no un documento de HTML completo !!!

debe ser, entonces... un contenedor binario para mostrar imágenes, un tag <img/>

Cita:
<img src="verFoto.php" height="100" width="120">
y verFoto.php ¿donde esta?? ¿¿que hace???


osea....

Código PHP:
<img src="mostImagen.php?id=$ref" alt="Ver Imagen"/> 

¿listo??
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 08/01/2009, 12:31
 
Fecha de Ingreso: enero-2009
Mensajes: 7
Antigüedad: 15 años, 3 meses
Puntos: 0
Exclamación Problemas al mostrar uan imagen blob

Hola!

Tengo un problema al mostrar una imagen blob que esta guardada en mi base de datos en mysql, la cuestion es que cuando la muestro, en lugar de la la imagen, aparecen es los caracteres ascii que la conforman, es decir, como si estuviera trabjando sin la cabecera.

esta es la logica:

****mostArti.php****

Esta pagina lo que hace es que muestrade forma paginada todos los datos de un articulo determinado en una tabla, y en una de las columnas un link que se llama "Ver Imagen" que es el que me envia por referencia el la referencia del articulo al cual pertenece la imagen a la pagina mostImagen.php, para ver la imagen

Código PHP:
<?php
require_once('conexion.php');

$ref=$_POST["ref"];
$tip=$_POST["tipo"];

if(
$ref!=NULL)
{
  
   
$sql="SELECT * FROM articulo WHERE refArticulo='$ref'";
   
$x=5;
}

else {
    
$sql="SELECT * FROM articulo WHERE tipo='$tip'";
    
$x=5;}
 
if(
$x!=NULL)
{
   if (!isset(
$pag)) 
   
$pag 1// $pg es la pagina actual 
 
   
$cantidad=10// cantidad de resultados por página 
   
$inicial $pag $cantidad
   
$result mysql_query("SELECT COUNT(*) FROM articulo"); 
list(
$total) = mysql_fetch_row($result);
$tampag 10;
$reg1 = ($pag-1) * $tampag;
$result mysql_query("SELECT * FROM articulo WHERE tipo='$tip'
  LIMIT $reg1, $tampag"
); 

  
   
$result=mysql_query($sql);
   if (
mysql_num_rows($result)){ 
   echo 
"<table align='center' bgcolor= '#006699' cellpadding=10 cellspacing=2 border=1>"// Comenzamos la tabla antes del ‘while’
echo "<tr><th>Referencia</th><th>Nombre</th><th>Talla</th><th>Color</th><th>Stock Max.</th><th>Stock Min.</th><th>Cant Disp</th><th>Precio Venta</th><th>Precio Compra</th><th>Imagen</th></tr>"// Así escribimos la cabecera de la tabla
  
while ($row = @mysql_fetch_array($result))
{
  
$ref=$row["refArticulo"];
  
$name=$row["nombre"];
  
$talla=$row["talla"];
  
$color=$row["color"];
  
$smin=$row["cantMinDep"];
  
$smax=$row["cantMaxDep"];
  
$cant=$row["cantDisp"];
  
$pc=$row["precVenta"];
  
$pv=$row["precCompra"];
echo 
"<tr><td>$ref</td>"// Comenzamos una fila (<tr>)
echo "<td>$name</td>";
echo 
"<td>$talla</td>";
echo 
"<td>$color</td>";
echo 
"<td>$smin</td>";
echo 
"<td>$smax</td>";
echo 
"<td>$cant</td>";
echo 
"<td>$pc</td>";
echo 
"<td>$pv</td>";
echo 
"<td><a href=mostImagen.php?id=$ref>Ver Imagen</a></td>
</tr>"
// Acabamos una fila (</tr>)
}
echo 
"</table>"// Fin de la tabla.
  
$total_paginas ceil($total/$cantidad);
  
$anterior $pag 1;
  
$posterior $pag1;
  
$enlace="mostrarArti.php?pag=";
  
  if (
$pag>1)
    echo 
"<a href=\"$enlace$anterior\">&laquo;</a> ";
  else
    echo 
"<b>&laquo;</b> ";
  for (
$i=1$i<$pag$i++){
   echo 
"<a href=\"$enlace$i\">$i</a> ";
  echo 
"<b>$pag</b> ";}
  for (
$i=$pag+1$i<=$total_paginas$i++)
    echo 
"<a href=\"$enlace$i\">$i</a> ";
  if (
$pag<$total_paginas)
    echo 
"<a href=\"$enlace$posterior\">&raquo;</a>";
  else
    echo 
"<b>&raquo;</b>";
    }
}
else
 echo
"<script>alert ('Registro  no encontrado en la Base de Datos');
           </script>"
;


    
?>

***mostImagen.php****

En esta pagina hago el codigo necesario para mostrar la imagen

Código PHP:
<?php
header
("Content-type: $tipo");
require_once(
'conexion.php');
$id =$HTTP_GET_VARS["id"] ;
$result mysql_query("SELECT Imagen, tipoIm FROM articulo WHERE refArticulo='$id'");
if (
$result){
$datos mysql_result($result,0,"Imagen");
$tipo mysql_result($result,0,"tipoIm");

    
    
//header("Content-Disposition: inline; filename=$nombre");  
    
print $datos;

echo 
"<img src=\"mostImagen.php?id=".$result['refArticulo']."\">";
}

else
 echo 
"<script languaje='javascript' type='text/javascript'>  
                  alert(\"Ocurrio un error y los datos no se registraron \");
                    </script>"

   


?>
HE BUSCADO EN VARIOS SITIOS Y NO ENCUENTRO LA SOLUCION, NO SE QUE ES LO QUE TENGO MAL!!!!!!! POR FAVOR NECESITO AYUDA URGENTE!!!!!!!
  #4 (permalink)  
Antiguo 08/01/2009, 13:25
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Problemas al mostrar uan imagen blob

Temas unidos por favor no dupliques temas.
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 18:40.