Foros del Web » Programando para Internet » PHP »

subir y bajar imagenes a bd

Estas en el tema de subir y bajar imagenes a bd en el foro de PHP en Foros del Web. Tengo el siguiente código,la imagen me la sube al la bd pero luego al bajarla no me la visualiza porque? Estas son las funciones de ...
  #1 (permalink)  
Antiguo 19/11/2004, 05:51
 
Fecha de Ingreso: junio-2004
Ubicación: ORENSE
Mensajes: 257
Antigüedad: 13 años, 5 meses
Puntos: 0
subir y bajar imagenes a bd

Tengo el siguiente código,la imagen me la sube al la bd pero luego al bajarla no me la visualiza porque?
Estas son las funciones de controlador:
Código PHP:
function contr_subir_imagen($codigo_inmueble){
            
            
$bd=new base_datos();
            
$bd->bd_Conectar();

            
$archivo $_FILES["foto"]["tmp_name"]; 
             
$tamanio $_FILES["foto"]["size"];
             
$tipo    $_FILES["foto"]["type"];
             
$nombre  $_FILES["foto"]["name"];     
             if(
$archivo != "none"){
                 
$fp fopen($archivo,"rb");
                
$contenido fread($fp,$tamanio);
                
$contenido addslashes($contenido);
                
fclose($fp);
                if(!
$bd->bd_subir_imagen($codigo_inmueble,$contenido)){
                    
$_SESSION['s_error_imagen']='No se ha podido cargar la imagen';
                }
            }
            
$bd->bd_Desconectar();
            
            
$this->contr_mostrar_datos_inmueble($codigo_inmueble,'Consulta Inmueble');
        }
        
        function 
contr_bajar_imagen($codigo_inmueble){
            
            
$bd=new base_datos();
            
$bd->bd_Conectar();

            
$foto=$bd->bd_bajar_imagen($codigo_inmueble);
            
$_SESSION['s_foto']=$foto;
            
            
$bd->bd_Desconectar();
            
            
header('location:../vista/imagenes/imagen.php');
            exit;        
        } 
Y estas las de bd:

Código PHP:
function bd_subir_imagen($codigo_inmueble,$contenido){
            
            
$sql='INSERT INTO IMAGENES (Codigo_Inmueble,Imagen) VALUES ("'.$codigo_inmueble.'","'.$contenido.'")';
            
$result=mysql_query($sql);
            if(
$result){
                return 
true;
            }else{
                return 
false;
            }
        }
        
        function 
bd_bajar_imagen($codigo_inmueble){
            
            
$sql='SELECT Id_foto,Imagen FROM IMAGENES WHERE (Codigo_Inmueble="'.$codigo_inmueble.'")';
            
$result=mysql_query($sql);
            
$foto=basename(tempnam(getcwd(),'tmp'));
            
$foto.=".jpg";
            
$contenido2=mysql_result($result,0,0);    
            
$ft=fopen($foto,"w"); 
            
fwrite($ft,$contenido2);
            
fclose($ft);
            return 
$ft;
        } 
Y aqui visualizo la imagen:
Código HTML:
<?
session_start();
?>
<html>
<head>
<title>Alta Cliente</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

<script language="JavaScript" type="text/JavaScript">

function MM_reloadPage(init) {  //reloads the window if Nav4 resized
  if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
    document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}
  else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();
}
MM_reloadPage(true);

</script>
</head>
<body>
<center><img src='.$s_foto.'>
</body>
</html> 

Última edición por bananas; 19/11/2004 a las 05:56
  #2 (permalink)  
Antiguo 22/11/2004, 05:47
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Y .. en el script que "visualiza tu foto" .. de donde sale $s_foto ?

Si ese $s_foto es esta variable de sesión que supongo que contendrá el nombre del archivo de la imagen o es el archivo binario en sí de la imagen?:

$_SESSION['s_foto']=$foto

en tu script que visualiza la foto deberías usar (para seguir con el uso de los arrays supeglobales):

Código PHP:
<img src='.$_SESSION['s_foto'].'
Pero ... deberías explicar como trabaja tu código (= ponerlo fácil para obtener respuestas).. Las imagenes (archivos binarios en sí) pueden quedar en tu BD referenciado con el nombre del archivo . .o incluso el archivo binario como tal en un campo de esta.

Por lo demás .. no entiendo para que haces en tu función:
bd_bajar_imagen() .. leer (al parecer) el archivo binario que guardas en tu BD y generar un archivo "temporal?". Eso no es necesario, puedes generar las cabeceras HTTP adecuadas para leer->entregar el archivo al buffer de salida y así mismo indicar al navegador (cliente) que el archivo que vas a descargar es de tal tipo; descargar o bien para un "<img src= ...>" para llamarlo.

Fijate en este tutorial como trabajar con imagenes en binario desde tus BD.
http://www.forosdelweb.com/f18/tutorial-ejemplo-subir-archivos-bd-guardando-bd-binario-127775/

Un saludo,
  #3 (permalink)  
Antiguo 22/11/2004, 10:07
 
Fecha de Ingreso: junio-2004
Ubicación: ORENSE
Mensajes: 257
Antigüedad: 13 años, 5 meses
Puntos: 0
En la bd guardo el archivo imagen en binario y eso es lo que intento bajar.
Hice los siguiente cambios siguiendo tus aportaciones CLUSTER pero me sigue sin dar resultados,estos son los cambios:

cambie el codigo de las de bd:

Código PHP:
function bd_subir_imagen($codigo_inmueble,$binario_contenido,$binario_peso,$binario_tipo){
            
            
$sql='INSERT INTO IMAGENES (Id_foto,Codigo_Inmueble,Imagen,Tipo,Peso)
            VALUES ("","'
.$codigo_inmueble.'","'.$binario_contenido.'","'.$binario_tipo.'",
            "'
.$binario_peso.'")';
            
$result=mysql_query($sql);
            if(
$result){
                return 
true;
            }else{
                return 
false;
            }
        }
        
        function 
bd_bajar_imagen($codigo_inmueble){
            
            
$sql='SELECT Imagen,Tipo FROM IMAGENES WHERE (Codigo_Inmueble="'.$codigo_inmueble.'")';
            
$result=mysql_query($sql);
            
$contenido=mysql_result($result,0,"Imagen");    
            
$tipo=mysql_result($result,0,"Tipo");
            
            
$array[0]=$contenido;
            
$array[1]=$tipo;
            
            return 
$array;
        } 
Y de las de controlador:
Código PHP:
function contr_subir_imagen($codigo_inmueble){
            
            
$bd=new base_datos();
            
$bd->bd_Conectar();
            
            
$binario_nombre_temporal=$_FILES['foto']['tmp_name'] ; 

            
$binario_contenido addslashes(fread(fopen($binario_nombre_temporal"rb"), filesize($binario_nombre_temporal))); 
            
            
$binario_peso=$_FILES['foto']['size']; 
            
$binario_tipo=$_FILES['foto']['type']; 
            
            if(!
$bd->bd_subir_imagen($codigo_inmueble,$binario_contenido,$binario_peso,$binario_tipo)){
                
$_SESSION['s_error_imagen']='No se ha podido cargar la imagen';
            }

            
$bd->bd_Desconectar();
            
            
$this->contr_mostrar_datos_inmueble($codigo_inmueble,'Consulta Inmueble');
        }
        
        function 
contr_bajar_imagen($codigo_inmueble){
            
            
$bd=new base_datos();
            
$bd->bd_Conectar();

            
$foto=$bd->bd_bajar_imagen($codigo_inmueble);
            
$_SESSION['s_foto']=$foto;
            
            
$bd->bd_Desconectar();

            
header('location:../vista/imagenes/imagen.php');
            exit;        
        } 
Y donde visualizo es:
Código HTML:
<?
session_start();
?>
<html>
<head>
<title>Alta Cliente</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

<script language="JavaScript" type="text/JavaScript">

function MM_reloadPage(init) {  //reloads the window if Nav4 resized
  if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
    document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}
  else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();
}
MM_reloadPage(true);

</script>
</head>
<body>
<?
header("Content-type: $_SESSION[s_foto[1]]"); 
echo("<img src='$_SESSION[s_foto[0]]'>;");
?>
</body>
</html> 

Última edición por bananas; 22/11/2004 a las 10:17
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:18.