Foros del Web » Programando para Internet » PHP »

Problema para mostrar imagen de una bd

Estas en el tema de Problema para mostrar imagen de una bd en el foro de PHP en Foros del Web. Código PHP: [ PHP ]  [/PHP]Hola estoy leyendo varios post del foro, econtré el siguiente link: http://www.forosdelweb.com/f18/tutor...inario-127775/ Pero a mi no me muestra una imágen, ...
  #1 (permalink)  
Antiguo 20/02/2013, 13:25
 
Fecha de Ingreso: octubre-2012
Mensajes: 40
Antigüedad: 11 años, 5 meses
Puntos: 0
Problema para mostrar imagen de una bd

Código PHP:
[PHP
[/PHP]Hola estoy leyendo varios post del foro, econtré el siguiente link:
http://www.forosdelweb.com/f18/tutor...inario-127775/

Pero a mi no me muestra una imágen, me muestra cosas raras...
Este es mi código:
PIDO DATOS
Código PHP:
<form action="" method="post" enctype="multipart/form-data">
  <h1>Datos </h1>
  
   <p>Nombre:<input type="text" name="nombre"></p>
  <p>Raza:<input type="text" name="raza" ></p>
  <p>imagen:<input type="file" name="imagen" ></p>
  <input type="hidden" name="id" value="<?php echo $_POST['id'];?>" /> 
 <input type="submit" name="guardar" value="Guardar"> 
 </form>
GUARDO DATOS

Código PHP:
echo"<form action=\"\" method=\"post\" enctype=\"multipart/form-data\" >";
 require (
'blob.php'); 
 if (isset(
$_POST['guardar']))
  {
 if(
$conexion=conexion()){
 
$imagen_nombre_temporal=$_FILES['imagen']['tmp_name'] ;
$imagen_blob addslashes(fread(fopen($imagen_nombre_temporal"rb"), filesize($imagen_nombre_temporal)));
$imagen_nombre=$_FILES['imagen']['name'];
$imagen_peso=$_FILES['imagen']['size'];
$imagen_tipo=$_FILES['imagen']['type'];
 
  
$sql="SELECT id FROM datos WHERE id='$_POST[id]'";
  
$resultado=mysql_query($sql);
  if(
mysql_num_rows($resultado)==0){ 
 
$sql="INSERT INTO Datos (nombre,raza,imagen_blob,imagen_nombre,imagen_peso,imagen_tipo,id) VALUES ('$_POST[nombre]','$_POST[raza]','$imagen_blob','$imagen_nombre','$imagen_peso','$imagen_tipo','$_POST[id]')";
 if(!@
mysql_query($sql,$conexion)){
 echo 
'Error al insertar la información ';}
 else{
 echo 
'<br>Información insertada correctamente.';
  echo
"<input type='hidden' name='id' value='".$_POST['id']."'>";
  echo
"<br><input type='submit' name='continuar' value='Continuar'>";
 }
 }
 else{ echo
"<br>Ya se le han asignado valores con el usuario que ocupas<br>";
 
$sql="SELECT nombre,raza,imagen_blob,imagen_nombre,imagen_peso,imagen_tipo FROM datos WHERE id='$_POST[id]'";
  if(
$resultado=mysql_query($sql,$conexion)){
  
$datos=mysql_fetch_array($resultado);
 
  echo
"<h1>Datos</h1>";
  
  echo
"<br>En los campos del formulario se ven los valores actuales, si no los actualiza los valores se mantienen";
  echo
"<br>Si desea puede actualizar los datos o continuar";
  echo
"<br>Nombre:<input type='text' name='nombre1' value='$datos[0]'/>";
  echo
"<br>Raza:<input type='text' name='raza1' value='$datos[1]'/>";
  echo
"<br>imagen:<input type='file' name='imagen1' />";
// AQUI ES DONDE ME ARROJA COSAS RARAS 
  
echo"<br>La imagen es:$blob";
  
 } 
 echo
"<input type='hidden' name='id' value='".$_POST['id']."'>";
 echo
"<br><br><input type='submit' name='actualizar' value='Actualizar'>";
 echo
"<br><br><input type='submit' name='continuar' value='Continuar'>";
 }
 }
 else{
 echo 
'No se realizó la conexión.';}
 }
 echo
"</form>"
BLOB.PHP
Código PHP:
if(isset($_POST['id'])){
require (
'conexion.php');
if(
$conexion=conexion()){
$sql="SELECT logo_blob,logo_nombre,logo_peso,logo_tipo FROM datos WHERE id='$_POST[id]'";
$resultado=mysql_query($sql,$conexion);
$blobmysql_result($resultado,0,"logo_blob");
$tipo mysql_result($resultado,0,"logo_tipo");
$nombremysql_result($resultado,0,"logo_nombre");
$peso mysql_result($resultado,0,"logo_peso");
    
header("Content-type: $tipo");
    
header("Content-length: $peso"); 
    
header("Content-Disposition: inline; filename=$nombre"); 

}} 
ACTUALIZAR
Código PHP:
echo"<form action=\"\" method=\"post\" enctype=\"multipart/form-data\" >";
 if(isset(
$_POST['actualizar']))
 {
 if(
$conexion=conexion()){
$imagen_nombre_temporal=$_FILES['imagen1']['tmp_name'] ;
$imagen_blob addslashes(fread(fopen($imagen_nombre_temporal"rb"), filesize($imagen_nombre_temporal)));
$imagen_nombre=$_FILES['imagen1']['name'];
$imagen_peso=$_FILES['imagen1']['size'];
$imagen_tipo=$_FILES['imagen1']['type'];
 
$sql="UPDATE datos SET nombre='$_POST[nombre1]',raza='$_POST[raza1]',imagen_blob='$imagen_blob',imagen_nombre='$imagen_nombre',imagen_peso='$imagen_peso' WHERE id='$_POST[id]'";
 if(!@
mysql_query($sql,$conexion)){
 echo 
'<br>Error al actualizar la información';}
 else{
 echo 
'<br>Información actualizada correctamente.';
 echo
"<input type='hidden' name='id' value='".$_POST['id']."'>";
 echo
"<br><br><input type='submit' name='continuar' value='Continuar'>";
 }
 }
 else{
 echo 
'No se realizó la conexión.';
 }
 }
 echo
"</form>"
A la hora de mostrar la imagen que ya existía muestra esto:
El logo es:GIF87a,����p~! �T<�êL7+�TڃXF���٤~�=H"�S)�䰥<dP6�m:ܳ�g#ɤ��lJ +�?�Ӻh9!��a֔r�qC�UE'�������t[I,��I(gD*��{��w) �Ę������g-�a:��i�- �wJ�yc���~`B�������Į�`(�H#~dN�2���[E.���W"�wT�V%t[E„o8 �?*�l.h<.X,֭��`H�K8�Ig.�������x]hH7��ؑU0������۴��nC���V�Ԥ���7�|W�˟��u�aR��qnS; t! ��4Z9#؄d�H �nS<+ �e��� 2............ y mucho mas

Cuando se actualiza una imagen manda a una pagina en blanco......

Alguien tiene alguna idea???????????????
  #2 (permalink)  
Antiguo 20/02/2013, 13:57
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años
Puntos: 270
Respuesta: Problema para mostrar imagen de una bd

La imagen se está transfiriendo como texto.El script, antes de hacer echo de los datos de la imagen, debe añadir un header estableciendo el Content-Type a image/gif
  #3 (permalink)  
Antiguo 20/02/2013, 14:22
 
Fecha de Ingreso: octubre-2012
Mensajes: 40
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: Problema para mostrar imagen de una bd

hola dashtrash, esa cabecera ya la pongo en blob.php, o tambien debo ponerla en la página donde imprimo mi resultado???

la cabecera en blob.php es: header("Content-type: $tipo");

pero lo que estoy notando es que no me esta guardando el tipo de imagen, cuando le pido
Código PHP:
 echo"$tipo"
no imprime nada, y en mi base de datos no guarda nada en la parte de imagen_tipo

POR CIERTO BLOB.PHP donde dice logo, debe ser imagen, todo lo demas si lo guarda, solo imagen_tipo no guarda nada
  #4 (permalink)  
Antiguo 20/02/2013, 14:53
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años
Puntos: 270
Respuesta: Problema para mostrar imagen de una bd

Usa getimagesize() en el fichero, en vez de confiar en el subcampo 'type' de $_FILES.El manual indica que no se debe confiar en ese campo.
  #5 (permalink)  
Antiguo 20/02/2013, 18:00
 
Fecha de Ingreso: octubre-2012
Mensajes: 40
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: Problema para mostrar imagen de una bd

hola ya solucioné lo del tipo, queda así:

Código PHP:
$logo_tip=exif_imagetype($logo_nombre_temporal) ;
$logo_tipo=image_type_to_mime_type($logo_tip);
echo
"El tipo es:$tipo";
// y me imprime El tipo es:image/jpeg 
BLOB.PHP queda como:
Código PHP:
if(isset($_POST['id'])){
require (
'conexion.php');
if(
$conexion=conexion()){
$sql="SELECT imagen_blob,imagen_nombre,imagen_peso,imagen_tipo FROM datos WHERE id='$_POST[id]'";
$resultado=mysql_query($sql,$conexion);
$blobmysql_result($resultado,0,"image_blob");
$tipo mysql_result($resultado,0,"imagen_tipo");
$nombremysql_result($resultado,0,"imagen_nombre");
$peso mysql_result($resultado,0,"imagen_peso");
    
header("Content-type: '$tipo'");
        
header("Content-length: $peso"); 
    
header("Content-Disposition: inline; filename=$nombre"); 
echo
"<input type='hidden' name='id' value='".$_POST['id']."'>";
}} 
pero me sigue pasando la imagen como texto, me sigue pasando esas cosas raras, todos esos simbolos....
¿Dónde debe ir la cabecera que dices?... tambien donde imprimo el resultado???... de antemando gracias¡¡¡
  #6 (permalink)  
Antiguo 20/02/2013, 18:19
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años
Puntos: 270
Respuesta: Problema para mostrar imagen de una bd

Lo que no puedes hacer es decir que vas a enviar una imagen, y enviar texto, además de la imagen.Mirando la salida binaria que te dió la imagen, veo que lo primero que hay es "El logo es:". En este código que pones ahora, metes un input type=hidden... En esta request, si lo que envías es una imagen, sólo envías la imagen..Nada de texto.
  #7 (permalink)  
Antiguo 20/02/2013, 23:07
 
Fecha de Ingreso: octubre-2012
Mensajes: 40
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: Problema para mostrar imagen de una bd

a pues mira, lo que quiero hacer es mostrar la imagen que guardé en mi bd, no se porque razón la guarda como texto, porque así la guarda, y cuando la muestro, muestra ese texto raro...

Código PHP:
$imagen_tip=exif_imagetype($imagen_nombre_temporal) ;
$imagen_tipo=image_type_to_mime_type($imagen_tip);
echo
"El tipo es:$tipo";
// y me imprime El tipo es:image/jpeg  

// esto es para ver que si me arroja el tipo de imágen del que se trata, y si lo hace 
El hidden que mando no es la imagen es el id para seguir trabajando con la bd y otros datos en los siguientes formularios¡¡....

El problema es que me guarda laimagen como texto, no entiendo cual es elproblema, mencionaste algo sobre una librería que debo poner.... pero si la pongo que es la de

Código PHP:
 header("Content-type: '$tipo'"); 
que arroja el tipo de imagen
  #8 (permalink)  
Antiguo 21/02/2013, 05:16
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años
Puntos: 270
Respuesta: Problema para mostrar imagen de una bd

Ya sé que el campo hidden no es una imagen..
Pero lo que no puedes es :
1) Enviar *texto* al navegador ("El tipo es...")
2) Después, decirle al navegador: "Y ahora, voy a enviar una imagen", y establecer el Content-Type
3) Y antes, o después, de enviar los datos de la imagen, seguir enviando texto "<input type..."

Lo que tienes que hacer es:
1)Decirle al navegador que vas a enviar una imagen: Content Type
2)Enviar los datos de la imagen.Fin.

El problema no es que te guarde la imagen como texto.Nada se guarda como "texto" o como "imagen".Las cosas *se interpretan* como texto o como imagen.Y si el navegador recibe texto, piensa que todo lo que viene después, es texto.Y lo interpreta de esa forma.
Como estás enviando texto antes de enviar la cabecera indicando que lo interprete como imagen, el navegador interpretará todo lo que le llegue después, como texto.

Etiquetas: bd, formulario, mysql, select, sql
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 12:15.