Recuerdo que cuando comencé a adentrarme en la programación PHP, base de datos, MySql y demás, me surgió una duda; ¿Como inserto una imagen en una base de datos MySql?, ¿Y cómo la recupero para mostrarla en una página web?

Insertar imagen mysql

Tras indagar un poco descubrí que esas preguntas estaban mal formuladas; aunque es posible subir una imagen a una base de datos, no es demasiado útil. La solución no está en subir la imagen, sino subir la URL de la imagen y guardar la imagen en una carpeta dentro del servidor.

He elaborado un sencillo código, expresamente para éste tutorial, que espero que te sirva a modo de ejemplo. Básicamente se trata de un formulario en HTML para enviar la imagen, y un pequeño script en PHP para guardarla, almacenar la URL en la base de datos y mostrar la imagen en la página.

Para poder almacenar la URL, primero deberás crear la siguiente tabla en la base de datos:


CREATE TABLE `imagenes` (
  `id` bigint(7) NOT NULL AUTO_INCREMENT,
  `url` char(250) NOT NULL,
  `alt` char(100) NOT NULL,
  KEY `id` (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1;


A continuación copia el siguiente código en un archivo con extensión .php, y sigue las instrucciones que aparecen más abajo.


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
</head>

<body bgcolor="#1B3D8A">
<?php
//DATOS DE CONEXION
$host 'localhost';
$user 'nombre';
$password 'password';
$database 'database';

mysql_connect ($host$user$password);
mysql_select_db ($database);
?>

<form method="post" enctype="multipart/form-data">
  ALT <input type="text" name="alt" size="40" /> <br /><br />
  IMAGEN <input type="file" name="file" size="20" /> <br /><br />

  <input type="submit" name="Subir" value="Subir Imagen"/>
</form>

<?php
if (isset ($_POST["Subir"])) { //AL PULSAR EL BOTON DEL FORMULARIO
  
$alt $_POST["alt"];
  
$url "http://.../imagenes/".$_FILES["file"]["name"];
  
//INSERTA LA URL EN LA BASE DE DATOS
  
mysql_query ("INSERT INTO imagenes (url, alt) VALUES ('$url', '$alt')");

  
//GUARDA LA IMAGEN EN LA RUTA DESTINO
  
$destino "C:/.../imagenes/".$_FILES["file"]["name"];
  
copy ($_FILES["file"]["tmp_name"], $destino);
}

echo 
'<br /><br /> Imagenes: <br /><br />';

//MUESTRA TODAS LAS IMAGENES
$result mysql_query ('SELECT * FROM imagenes');
while (
$row mysql_fetch_array ($result)) {
  echo 
'<img src="'.$row['url'].'" alt="'.$row['alt'].'" />';
}
?>

</body>

</html>

Debes hacer 3 cosas:

  • Sustituye los datos de conexión (al principio del código) por los tuyos.
  • Crea una carpeta con el nombre "imagenes" en tu servidor, no olvides darle permisos de escritura.
  • Sustituye la url "http://.../" y la ruta "C:/.../" por la dirección donde has creado la carpeta "imagenes".

Nota: Si tu servidor está basado en Linux, la ruta sería algo como "/var/.../"



Espero que te haya sido de utilidad, si tienes alguna duda siempre puedes dejar un comentario.

Si te gustó el artículo...

Puedes seguir el blog a través de Twitter, Facebook o tu lector de feeds RSS.

Artículos Relacionados

7 Comentarios



Fido-Strike

haber si me da, lo probare, ya que es lo que necesito, Gracias de antemano man

Junio 30, 2009



Sergio GR

De nada ;) , si tienes alguna duda me lo comentas.

Junio 30, 2009



Fido-Strike

Oye man, esto no me da, no si yo no lo he incluido bien, el caso es que yo ya tengo una tabla llamada "usuarios", y en ella una celda llamada "avatar", por ello tuve que cambiar los valores en este tu código: mysql_query ("INSERT INTO usuarios (avatar) VALUES ("$avatar")");

Y no me da nada, ni sube ni nada, también te dejo por si acaso mi código completo de mi pagina php:

http://music-strike.net/codigo.txt

PD: la conexión con la base de datos ya esta en el config.php por ello imagino que ya no es necesario crear otra como en la tuya, y puse directamente el include.

"A" ese formulario es para que mis usuarios puedan editar su perfil, por lo tanto no se si se podría hacer que cuando suban una nueva foto se reemplace con la que ya tiene, cosa que no se suban fotos en vano...

Junio 30, 2009



Fido-Strike

Perdona, si pudieras ayudarme con esta otra opción, ya que tengo otro script para esto, y ya he probado incluirlo en este otro y no me da, no se como puedo incluirlo en mi form, cosa que se almacene la url subida en mi base de datos. Este es el código:

http://music-strike.net/codigo2.txt

saludos..

Junio 30, 2009



Sergio GR

Lo mire por encima y en principio eso debería funcionar, o al menos insertar la URL del avatar en la base de datos, aunque creo que no le estás dando ningún valor a la variable $avatar, pero aún así... no se cual es el fallo, trata de mirarlo con mas calma a ver donde está el error.

Y para que la foto se remplace basta con que la nueva tenga el mismo nombre que la anterior y se sobrescribirá, o sino borras la anterior con la función unlink("url"); y guardas la nueva.

Junio 30, 2009



Sergio GR

¿Y si lo intentas con el script de este tutorial a ver si te funciona?, si te funciona ya solo es copiar y aplicarlo al tuyo, sino pues seria un problema de permisos o de la conexión.

Junio 30, 2009



Nexuxirc

#7 Nexuxirc


Super bien!! funciona! gracias.

Mayo 15, 2010



Deja tu Comentario

Asigna una imagen a tu email con Gravatar, si no sabes accede al siguiente Tutorial.



Asigna una imagen a tu email
Nombre
Email [Requerido]
Web/Blog

Información

  • Aplicamos el tag nofollow, y los enlaces con keywords en los comentarios podrían ser eliminados, intentamos mantener limpio el blog de spam.

  • Puedes usar las etiquetas <i>, <b>, <em>, <strong>, <a>, href, procura cerrarlas adecuadamente o tu comentario podria no mostrarse del modo que deseas.

  • Si necesitas que se vean en el comentario caracteres especiales como los usados en lenguajes de programacion como php, xhtml, etc., debes escribirlo dentro de las etiquetas [code] [/code], de lo contrario no se mostrará.

  • Procura no escribir enlaces que no tengan ninguna relación con el tema.

  • Si realizas una crítica procura argumentarla, pero sobretodo evita los insultos.