No has iniciado sesión
Conectar al sistema | Registrar usuario
Categorías Articulo
 
36 votos
Imagen en base de datos
 
Vamos a ver como podemos guardar una imagen en un campo LONGBLOB de nuestra base de datos MySQL y luego mostrarla al visitante de nuestra página sin que la imagen se encuentre ya en nuestro servidor, si quereis podeis leer tambien una version mejorada de este artículo escrita por eial.

Lo primero que haremos es crear en nuestra base de datos una tabla con dos campos, el primero, el campo en el que almacenaremos el nombre del archivo, el segundo, donde pondremos la imagen:
 
000 
001 
002 
003 
CREATE TABLE `imagenes` (
`nombre` VARCHAR(100) ,
`imagen` LONGBLOB NOT NULL
);
 
Una vez configurada la tabla, haremos el formulario para subir la imagen:
 
subir.php
000 
001 
002 
003 
004 
<form method="post" action="guardar.php" enctype="multipart/form-data">
Nombre: <input type="text" name="nombre" maxlength="100"><br>
Imagen: <input type="file" name="imagen" size="40"><br>
<p><input type="submit" name="submit" value="Subir">
</form>
 
Después haremos la página que nos guardará la imagen en la base de datos.

Esta página recibirá la imagen y la leerá usando fread() y filesize para definir el tamaño a leer y luego guardará la imagen con el nombre seleccionado en la base de datos.
 
guardar.php
000 
001 
002 
003 
004 
005 
006 
007 
<?
// Configurar las dos lineas siguientes
mysql_connect("servidor","usuario","contraseña");
mysql_select_db("base_de_datos");
$imagen addslashes(fread(fopen($imagen"r")filesize($imagen)));
$nombre $_POST["nombre"];
mysql_query("INSERT INTO imagenes (nombre,imagen) VALUES ('$nombre','$imagen')");
?>Se ha subido la imagen a la base de datos, puedes verla pulsando <a href="ver.php?nombre=<? echo $nombre ?>">aquí
</a>
 
Una vez subida y configurada la página guardar.php, solo nos faltará hacer la página para mostrar la imagen.

Esta página leerá la imagen de la base de datos a partir del nombre pasado por url, luego enviará un header de content-type = image/jpeg, que tambien nos sirve para gif, y finalmente enviará el contenido de la imagen.
 
ver.php
000 
001 
002 
003 
004 
005 
006 
007 
008 
009 
010 
<?
$nombre 
$_GET['nombre'];
// Configurar las dos lineas siguientes
@mysql_connect("servidor","usuario","contraseña");
@
mysql_select_db("base_de_datos");
$query "SELECT imagen FROM imagenes WHERE nombre = '$nombre'";
$result = @mysql_query($query);
$imagen = @mysql_result($result,0)
Header( "Content-type: image/jpeg")
echo 
$imagen
?>
 
Configuraremos este último código y ya podremos provar nuestro ejemplo accediendo a subir.php

Tienes que tener en cuenta que no podrás subir dos imagenes y ponerles el mismo nombre, para mostrar una imagen en tu web lo haras desde ver.php?nombre=nombre_de_la_imagen:
 
000 
<img src="ver.php?nombre=nombre_de_la_imagen">
 
Puedes descargar un zip con los archivos usados en este artículo.
 
 
¿? Resolver dudas
Si tienes problemas o dudas con el contenido del artículo no dudes a preguntar en los foros de PHP de Programación Web indicando el artículo al que te refieres.
 
Comentarios
05/11/03 Comentario 13
Excelente idea...

pero el ejemplo no funca...


voy a tratar de hacerlo yo en mi pc a ver que pasa!!!
09/11/03 Es verdad, habia un error
Es verdad, había un error en el ejemplo publicado, ya he solucionado el problema que consistia en llamar a guardar.php en lugar de a 13/guardar.php en el formulario de 13.php.
13/04/04 Comentario 96
sabes el ejemplo bueno pero lamentablemente las imagenes de 63*50 de 30KB no se ven o sea se ve pero cortada la imagen ojala me explique bien si me pueden ayudar lo agredeceria
25/05/04 Comentario 300
quisiera informar que yo probe estos scripts y no me funciono, da un error en el argumento "r" que esta en el fread y no lo he podido solucionar.
21/04/05 Corrección del script
a)Para empezar hay que cambiar el metodo POST por GET...

b)poner la siguiente linea en el archivo guardar.php

$imagen=$_GET['imagen'];

esto antes del fopen.

c)Si estas usando Windows utiliza "rb"
Linux parece q con "r" sobra ...en el archivo guardar.php

$imagen = addslashes(fread(fopen($imagen, "rb"), filesize($imagen)));

d)Cambiar la siguiente linea en ver.php

$result = @MYSQL_QUERY($query); por esta otra...
$result = @mysql_query($query);
17/04/07 Comentario 616
echo "gracias"

me funciono sin ningun problema
22/01/09 Comentario 1091
exelente tu aporte sigue asi
21/07/09 Comentario 1280
gracias por el comentario es muy bueno me libro de reprobar
29/08/09 Comentario 1313
gracias, muy útil
17/11/10 Gracias!!!
gracias!!!!

me fue muy util todo esto!!!

muchas gracias gracias!!!!!!
18/01/11 Excelente tuto
Muy útil para subir y mostrar imágenes en BD.

o_0
25/01/11 Comentario 1651
Mira me registre solo por darte las gracias por tu aporte, realmente gracias
27/05/11 Comentario 1720
hola
 
Redes Sociales
Programación Webon

Compartir en Google Plus