Foros del Web » Programando para Internet » PHP »

Mostrar imagen de una base de datos

Estas en el tema de Mostrar imagen de una base de datos en el foro de PHP en Foros del Web. Hola que tal, el problema que tengo es que no puedo mostrar una imagen cargada en una base de datos porque en vez de salir ...
  #1 (permalink)  
Antiguo 24/01/2008, 08:01
 
Fecha de Ingreso: enero-2008
Mensajes: 84
Antigüedad: 16 años, 3 meses
Puntos: 0
Mostrar imagen de una base de datos

Hola que tal, el problema que tengo es que no puedo mostrar una imagen cargada en una base de datos porque en vez de salir la imagen, sale un monton de caracteres. Aca les pongo el codigo que se encarga de guardar la imagen en la BD:

if(!empty($_FILES['imagen']))
{

$destino = $_SERVER['DOCUMENT_ROOT']."/";
$destino .= basename($_FILES['imagen']['name']);
$temporal = $_FILES['imagen']['tmp_name'];
$name = $_FILES["imagen"]["name"];
$type = $_FILES["imagen"]["type"];
$tmp_name = $_FILES["imagen"]["tmp_name"];
$size = $_FILES["imagen"]["size"];

$fp = fopen($tmp_name, "rb");
$tfoto = fread($fp, filesize($tmp_name));
$tfoto = addslashes($tfoto);
fclose($fp);

@unlink($tmp_name);


}

if($NuevoContacto->Agregar_contacto($_POST['nombre'],$_POST['apellido'],$_POST['telefono'],$_POST['edad'],$_POST['dni'],$_POST['domicilio'],$_POST['rol'],$tfoto,$type,$_POST['usuario'],$_POST['contrasenia'])){

$Mensaje .= "El contacto fue ingresado exitosamente a la Base de Datos.<br><br>";
}else{
$Mensaje .= "Se produjo un error ingresando el contacto en la base de datos.<br><br>";
}

este pedazo de codigo guarda la imagen en la BD. A la imagen, la recibe por post entre otros datos, y la funcion contacto->agragar_contacto es la que guarda todos los datos recibidos por post en la BD incluido la imagen y su tipo. Ahora les muestro el archivo entero en donde se muestra la imagen:

<?php

include_once("seguridad.php");

include_once("Class.Contacto.php");

$conn = mysql_connect("localhost","root","");
mysql_select_db("contactos",$conn);

$res = mysql_query("select * from contactos where idContacto = '".$_GET['id']."'");

$fila = mysql_fetch_array($res);

header ('Content-type: ' . $fila['tipo_img']);
echo $fila['tipo_img'];

$archperfil= $fila['nombre']."_".$fila['apellido'].".txt";

$fp = fopen($_SERVER['DOCUMENT_ROOT']."/".$archperfil,"r");

?>
<html>
<head>
<title>Foto y Perfil</title>
</head>
<body>

<form name="FotoPefil" action = "#" method = "POST" enctype="multipart/form-data">

<table align="center" width="%80" cellspacing="2" cellpadding="2" border="0">
<tr>
<td align="center" >
<?php echo $fila['imagen']; ?>
</td>
</tr>
<tr>
<td align = center>
Perfil
</td>
</tr>
<tr>
<td>
<textarea name=editor rows = 10 cols = 50><?php fpassthru($fp)?></textarea>
</td>
</tr>
</table>

<h3 align="center"><A href= <?php echo "buscadoradm.php?cb=".$_GET['cb']."&pc=".$_GET['pc']; ?> >Volver</A></h3>

</form>
</body>
</html>

Este archivo se los muestro entero porque ahi me parece que puede estar el error. Si alguien puede decirme cual es se lo agredezco mucho.
  #2 (permalink)  
Antiguo 24/01/2008, 08:10
okram
Invitado
 
Mensajes: n/a
Puntos:
Re: Mostrar imagen de una base de datos

Si defines una cabecera que indica que el contenido devuelto por el archivo es una imagen, entonces no tienes por qué mostrar contenido HTML (y visceversa, si muestras contenido HTML, no tienes ninguna razón para decirle al navegador que estás enviando una imagen).

No puedes juntar ambas partes en un sólo archivo. Lo que debes hacer es crear un archivo que únicamente te genere la imagen (p.ej. muestra_imagen.php), y en otro separado el contenido HTML, en el cual llamarás la imagen de la forma clásica:

Código HTML:
<img src="muestra_imagen.php" /> 
Un saludo,
  #3 (permalink)  
Antiguo 24/01/2008, 09:47
Avatar de totigo  
Fecha de Ingreso: marzo-2007
Ubicación: America
Mensajes: 103
Antigüedad: 17 años, 1 mes
Puntos: 3
Re: Mostrar imagen de una base de datos

Lo que debes hacer es colocar el siguiente codigo en un .php aparte, por ejemplo foto.php.

El cual se encargará de realizar la consulta y mostrar la imagen! recuerde debe ir APARTE de tu codigo original!


<?php

header("Content-type: image/JPEG");

$codigo = $_GET['codigo'];
$usuario="sa";
$contrasena="";
$servidor="mssqlinmuebles";
$Link_ID=odbc_connect($servidor,$usuario,$contrase na) or die('No pudo crear una conexi&oacute;n');
$Query_ID = odbc_exec($Link_ID, " SELECT foto FROM Fotografias WHERE codigo='".$codigo."'");
if ($Query_ID) {
odbc_longreadlen($Query_ID, 131072);
odbc_binmode($Query_ID,ODBC_BINMODE_PASSTHRU);
$Images = odbc_result($Query_ID, 1);
}

echo $Images
?>


Para invocarla desde otra pagina!!! podes usar algo como :

<img src="foto.php?codigo=12125451" />


Hecho!!

Rodrigo Solórzano Pardo
  #4 (permalink)  
Antiguo 24/01/2008, 10:05
okram
Invitado
 
Mensajes: n/a
Puntos:
Re: Mostrar imagen de una base de datos

Cita:
Iniciado por totigo Ver Mensaje
Lo que debes hacer es colocar el siguiente codigo en un .php aparte, por ejemplo foto.php.

El cual se encargará de realizar la consulta y mostrar la imagen! recuerde debe ir APARTE de tu codigo original!

<?php

header("Content-type: image/JPEG");

$codigo = $_GET['codigo'];
$usuario="sa";
$contrasena="";
$servidor="mssqlinmuebles";
$Link_ID=odbc_connect($servidor,$usuario,$contrase na) or die('No pudo crear una conexi&oacute;n');
$Query_ID = odbc_exec($Link_ID, " SELECT foto FROM Fotografias WHERE codigo='".$codigo."'");
if ($Query_ID) {
odbc_longreadlen($Query_ID, 131072);
odbc_binmode($Query_ID,ODBC_BINMODE_PASSTHRU);
$Images = odbc_result($Query_ID, 1);
}

echo $Images
?>


Para invocarla desde otra pagina!!! podes usar algo como :

<img src="foto.php?codigo=12125451" />


Hecho!!

Rodrigo Solórzano Pardo
ODBC? , pero gerkin usa MySQL
  #5 (permalink)  
Antiguo 24/01/2008, 10:32
 
Fecha de Ingreso: enero-2008
Mensajes: 84
Antigüedad: 16 años, 3 meses
Puntos: 0
Re: Mostrar imagen de una base de datos

Gracias por sus respuestas, entonces lo que voy hacer es separar la parte que muestra la imagen y la parte que tiene codigo html espero que todo salga bien!! Cualquier cosa les consulto de nuevo. ah totigo si, yo uso myql pero gracias igual!!! saludos!!!
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 21:15.