Foros del Web » Programando para Internet » PHP »

mostrar imagenes blob

Estas en el tema de mostrar imagenes blob en el foro de PHP en Foros del Web. Hola vereis, tengo una preguntas sobre las imagenes insertadas en mysql como blob, mi pregunta es si se pueden insertar imagenes en campos blob aunque ...
  #1 (permalink)  
Antiguo 16/07/2009, 15:57
 
Fecha de Ingreso: julio-2009
Mensajes: 4
Antigüedad: 14 años, 9 meses
Puntos: 0
mostrar imagenes blob

Hola vereis, tengo una preguntas sobre las imagenes insertadas en mysql como blob, mi pregunta es si se pueden insertar imagenes en campos blob aunque en la base de datos no exintan los campos para el peso y el tipo de archivo?

Mi problema es que me han pasado una aplicacion que inserta, modifica, borra y muestra unas fichas que se componen de imagenes y texto, las fichas que hay en la base de datos y que habian sido insertadas antes de que yo tuviera este proyecto se muestran perfectamente (texto e imagenes) pero cuando intento insertar una nueva ficha me lo inserta bien (todos los campos de texto tienen su contenido y en los campos de las imagenes me sale '[BLOB - 15.1 KB]') pero a la hora de mostar la ficha solo me muestra los campos de texto y las imagenes no me salen, mejor dicho me sale un borde negro border='1' (que tengo puesto en los estilos para las imagenes) pero no la imagen....se supone que si en la base de datos en el campo de la imagen tiene contenido '[BLOB - 15.1 KB]' es que se ha insertado bien no?

a ver si me podeis decir algo.....gracias

os pongo el codigo que uso


input donde cargo la imagen
Código HTML:
<input type="hidden" name="MAX_FILE_SIZE" value="<?php echo $_SESSION['maxsize'];?>">
<input name="situation" type="file" class="fondo_campo_insert" id="situation" value="<?php echo $_POST['situation']; ?>" maxlength="8"> 
tratamiento de las fotos
Código PHP:
$_SESSION['yac_id']=mysql_insert_id(); //devuelve el ultimo yac_id del INSERT.


//TRATAMIENTO DE LAS FOTOS

require_once ('manejo_fotos.php');
$ancho_fijo 300//ancho de las fotos optimizadas en pixels.
$temp_foto 'img.jpg'//foto temporal reducida.

$campo_actual "situation";
$controlcampo_lleno($campo_actual);
if (
$control==0)
{
    if (
tiene_extension_valida($_FILES[$campo_actual]['name']))
    {      
resize ($campo_actual,$ancho_fijo);  //devuelve 'img.jpg'
        
subir_foto_sql($campo_actual,$_SESSION['yac_id'],'img.jpg');

    }
    else 
    {    
$redir="<meta http-equiv=\"refresh\" content=\"5; URL=modify1.php\"><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><table width=\"80%\"  border=\"0\" align=\"center\" cellpadding=\"0\" cellspacing=\"0\" class=\"bd_ayuda\"><tr><td align=\"center\" valign=\"middle\"><div align=\"center\"><p>&nbsp;</p><p>Has seleccionado una extension de archivo no válida en el campo $campo_actual. Solo los formatos de archivo '.jpg' ó '.jpeg' estan permitidos</p></div></td></tr></table>";
        print 
$redir;
        die();
    }
}
else
{
if  (
$control==1)
    {
        
$redir="<meta http-equiv=\"refresh\" content=\"5; URL=modify1.php\"><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><table width=\"80%\"  border=\"0\" align=\"center\" cellpadding=\"0\" cellspacing=\"0\" class=\"bd_ayuda\"><tr><td align=\"center\" valign=\"middle\"><div align=\"center\"><p>&nbsp;</p><p>El archivo ".$_FILES[$campo_actual]['name']." que intentas subir es mayor que 200kb, selecciona otro más pequeño</p></div></td></tr></table>";
        print 
$redir;
        die();
    }

este es el archivo manejo_fotos.php
Código PHP:
<?php
function campo_lleno ($campo)
{
    
$nombre $_FILES[$campo]['name'];
    if (
$nombre !='')
    {    
        if (
$_FILES[$campo]['size']!=0)
        {
        echo 
"el campo esta lleno <br>";
        return 
0;
        }
        else
        {    
Ha sido rechazado por tamaño
            
return 1;
        }
    } 
    else 
    {    
No ha seleccionado archivo alguno
        
return 2
    }
}

function 
tiene_extension_valida($nombre)
{
    
$extensiones=array("jpg","jpeg","JPG","JPEG");
    
$var=explode(".","$nombre");
    
$num=count($extensiones);
    
$valor=$num-1;
    for(
$i=0;$i<=$valor;$i++)
    {    if(
$extensiones[$i]==$var[1])
        {    return 
true;
            echo 
"tiene extension valida<br>";
            break;
        }
    }
    return 
false;
}

function 
resize ($campo_actual$ancho_fijo)
{
//    echo "foto_resize = $foto <br>";
    
$foto $_FILES[$campo_actual]['tmp_name'];
    
//$tamaño = $_FILES["$campo_actual"]['size'];
    
$im imagecreatefromjpeg($foto);
    
$arr=getimagesize($foto);
    
$ratio $arr[0]/$ancho_fijo;
//    echo "ratio = $ratio <br>";
    
$im2imagecreatetruecolor($ancho_fijo,$arr[1]/$ratio);
    
imagecopyresampled($im2,$im,0,0,0,0,$ancho_fijo,$arr[1]/$ratio,$arr[0],$arr[1]);
    
imageinterlace($im2,1);
    
imagejpeg ($im2,'img.jpg',75);
    
imagedestroy ($im);
    
imagedestroy ($im2);
}


function 
subir_foto_sql ($col_name$yac_id,$foto_temp)
{
    require_once (
'../configure.php');

//    $redir="<meta http-equiv=\"refresh\" content=\"5; URL=fill.php\"><br>Espera, serás redireccionado<br>";
    
    
    
$data "";
    
$userfile $foto_temp;
//    echo "userfile = $userfile <br>";
//    $tamano=$_FILES["$col_name"]["size"];
    
$tipo="image/pjpeg";
    
$fp fopen($userfile"rb");
    while(!
feof($fp))
    { 
        
$data .= fread($fp1024); 
    } 
    
fclose($fp); 
    
$data addslashes($data);
    
$data addcslashes($data"\0");
    require_once (
"../../../../Connections/db_connect.php");
    
mysql_select_db($_SESSION['db_name']);
    
$sql "UPDATE ".$_SESSION['nombre_ficha']." SET $col_name='$data' WHERE yac_id = ".$_SESSION['yac_id']."";
//    echo "UPDATE ".$_SESSION['nombre_ficha']." SET $col_name='data' WHERE yac_id = ".$_SESSION['yac_id']."<br>";
//    $res=mysql_query($sql,$_SESSION['connection'])or die (print $redir. mysql_error());
    
$res=mysql_query($sql,$_SESSION['connection']) ;
}
?>
y asi muestro las fotos
Código PHP:
   <?php print "<img src='printimage.php?col=representative&id=".$_SESSION['yac_id']."'  border='1'>"?>
y esto es el archivo printimage.php
Código PHP:
<?php
require_once ('../configure.php');
$link=mysql_connect("bd","user","password");
mysql_select_db(db);
$MainSQL="SELECT ".$_GET['col']." FROM ".$_SESSION['nombre_ficha']." where yac_id=".$_GET['id']."";
$res mysql_query($MainSQL,$link);
$row=mysql_fetch_array($res);
$data $row[0];
if (
strlen($data)<5){
    
$MainSQL="SELECT img FROM temp where id=1";
    
$res mysql_query($MainSQL,$link);
    
$row=mysql_fetch_array($res);
    
$data $row[0];
    }    
$tipo="image/jpeg";
header("Content-Type: "$tipo ."\n");
header("Content-Transfer-Encoding: binary\n"); 
header("Content-length: " strlen($data) . "\n"); 
print  
$data;
?>
  #2 (permalink)  
Antiguo 16/07/2009, 16:08
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: mostrar imagenes blob

En tu ficha da un boton derecho sobre la imagen y selecciona mostrar imagen, esto te va a mostrar la imagen en el navegador y en caso de que tenga errores los vas a poder ver.

Saludos.
  #3 (permalink)  
Antiguo 17/07/2009, 01:12
 
Fecha de Ingreso: julio-2009
Mensajes: 4
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: mostrar imagenes blob

Hola Gator, gracias por tu interes pero lo que pasa esque cuando saco la nueva ficha insertada por mi NO ME SALE IMAGEN ALGUNA sino que me sale el recuadro de un border="1" que le tengo puesto para cuando saca imagenes
  #4 (permalink)  
Antiguo 17/07/2009, 09:18
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: mostrar imagenes blob

Entonces entra directo vía URL a printimage.php con un parámetro valido para que puedas ver directo en el explorador si se genera o no la imagen y los posibles errores.

Saludos.
  #5 (permalink)  
Antiguo 17/07/2009, 15:53
 
Fecha de Ingreso: julio-2009
Mensajes: 4
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: mostrar imagenes blob

Bien GatorV..... he probado lo que me decias y las imágenes de las fichas insertadas si que las muestra pero las que yo he insertado y que en el campo blob me pone [BLOB - 15.1 KB]....como si tuviese una imagen de 15.1 kb, en esas me saca una pantalla en blanco y la url de la página....me muestra esto..asi que supongo que no está insertando bien las imagenes.....

Pero entonces.......se puede subir una imagen a un campo blob sin que en esa tabla de la base de datos exista ningun campo para tipo y para el peso de la foto???? ya que por ahi he visto que siempre piden nombre, tipo, temporal y tamaño y creo que en el codigo que me han pasado no usa el tamaño [size] y el tipo se lo da el propio código.....y en la tabla de las fcihas no hay campos para el tamaño ni el tipo....

el código que tengo hace llama a unas funciones que comprueban que tiene las extension correcta, que no estan vacios y redimensiona la imagen a 300

Código PHP:
$ancho_fijo 300//ancho de las fotos optimizadas en pixels.
$temp_foto 'img.jpg'//foto temporal reducida.

$campo_actual "situation";
$controlcampo_lleno($campo_actual);
if (
$control==0)
{
    if (
tiene_extension_valida($_FILES[$campo_actual]['name']))
    {      
resize ($campo_actual,$ancho_fijo);  //devuelve 'img.jpg'
        
subir_foto_sql($campo_actual,$_SESSION['yac_id'],'img.jpg');

    } 
pero la funcion que inserta las imagenes

Código PHP:
function subir_foto_sql ($col_name$yac_id,$foto_temp)
{
    require_once (
'../configure.php');

//    $redir="<meta http-equiv=\"refresh\" content=\"5; URL=fill.php\"><br>Espera, serás redireccionado<br>";
    
    /*
    $_SESSION['server'] = 'llda410.servidoresdns.net';
    $_SESSION['db_name'] = 'qz025';
    $_SESSION['db_user'] = 'qz025';
    $_SESSION['password'] = 'europa';
    $_SESSION['connection']=mysql_pconnect($_SESSION['server'],$_SESSION['db_user'],$_SESSION['password'])or die ("Connection not available, try again in a few minutes, reload site please");
*/
    
$data "";
    
$userfile $foto_temp;
//    echo "userfile = $userfile <br>";
//    $tamano=$_FILES["$col_name"]["size"];
    
$tipo="image/pjpeg";
    
$fp fopen($userfile"rb");
    while(!
feof($fp))
    { 
        
$data .= fread($fp1024); 
    } 
    
fclose($fp); 
    
$data addslashes($data);
    
$data addcslashes($data"\0");
    require_once (
"../../../../Connections/db_connect.php");
    
mysql_select_db($_SESSION['db_name']);
    
$sql "UPDATE ".$_SESSION['nombre_ficha']." SET $col_name='$data' WHERE yac_id = ".$_SESSION['yac_id']."";
//    echo "UPDATE ".$_SESSION['nombre_ficha']." SET $col_name='data' WHERE yac_id = ".$_SESSION['yac_id']."<br>";
//    $res=mysql_query($sql,$_SESSION['connection'])or die (print $redir. mysql_error());
    
$res=mysql_query($sql,$_SESSION['connection']) ;

para mi que le falta algo....a ver si me podeis ayudar
  #6 (permalink)  
Antiguo 20/07/2009, 12:36
 
Fecha de Ingreso: julio-2009
Mensajes: 4
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: mostrar imagenes blob

alguien me puede decir como subir imagenes a campos mediumblob y en la tabla solo existe el campo para la imagen....no hay campos para la extension o el tamaño.....es esto posible?
Y si es posible como muestro las fotos sin el campo extension del archivo???
Por favor hecharme una mano
  #7 (permalink)  
Antiguo 20/07/2009, 12:39
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: mostrar imagenes blob

Revisa el siguiente aporte: http://www.forosdelweb.com/f18/tutor...inario-127775/, adaptalo a tus necesidades.

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 01:59.