Subir imágenes mediante PHP

Subir imágenes mediante PHP

Fecha: 10-ene-2010 | Autor: .
Guardado en: Códigos, Tutoriales PHP


Un lector (cesarin) me había sugerido hace algún tiempo, que tratara el tema de “Cómo subir imágenes al servidor y guardar el nombre en una base de datos“, y para ello voy a redactar este breve tutorial sobre Cómo subir imágenes en PHP y guardar el nombre en una BBDD.

Para este mini-manual necesitamos poseer nociones básicas de PHP así como conectar a una BBDD e interactuar con ella.

Para crear nuestro uploader en PHP, necesitaremos 3 cosas:

  • 1 archivo HTML que contenga el formulario que solicitará la imagen.
  • 1 archivo PHP que procesará la subida de la imagen.
  • La base de datos que guardará el nombre de las imágenes que subamos.

El archivo HTML debe contener un formulario con 2 campos un input type=”file” que será el selector de la imagen y un input type=”submit” que será el botón que enviará el formulario. Además debemos tener en cuenta que al enviar imágenes en un formulario debemos agregar enctype=”multipart/form-data” dentro de la tag <form>

Código del archivo formulario.html:

1
2
3
4
5
6
<form action="procesar.php" enctype="multipart/form-data" method="post">
    <label for="imagen">Imagen:</label>
    <input id="imagen" name="imagen" size="30" type="file" />
 
    <input name="submit" type="submit" value="Guardar" />
</form>

El PHP que lo procese hará 3 cosas:

  1. Recibir los datos de la imagen mediante $_FILES.
  2. Guardará la imagen en la ruta que le indiquemos (el directorio debe tener permisos de escritura [CHMOD 0777]).
  3. Guardar el nombre de la imagen en la BBDD que definamos.

Código para subir la imagen (primera parte de procesar.php):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
 
    // Datos de conexión a configurar
    $user = "usuario_bbdd";
    $pass = "clave_bbdd";
    $bbdd = "nombre_bbdd";
 
    // Ruta donde se guardarán las imágenes
    $directorio = $_SERVER['DOCUMENT_ROOT'].'/uploads/';
 
    // Conecto a la BBDD
    $dbh = mysql_connect("localhost", $user, $pass);
    $db = mysql_select_db($bbdd);
 
    // Recibo los datos de la imagen
    $nombre = $_FILES['imagen']['name'];
    $tipo = $_FILES['imagen']['type'];
    $tamano = $_FILES['imagen']['size'];
 
    // Muevo la imagen desde su ubicación
    // temporal al directorio definitivo
    move_uploaded_file($_FILES['imagen']['tmp_name'],$directorio.$nombre);
 
?>

Ahí ya deberíamos tener nuestra imagen subida en el sitio indicado, ahora debemos guardar la variable $nombre en nuestra base de datos previamente creada. Para este ejemplo usaremos una bbdd que simplemente guardará el valor del nombre de la imagen y un id autonumerico » ID [INT(9)] | nombre_archivo – [VARCHAR(255)].

De modo que agregamos en procesar.php las siguientes líneas:

1
2
3
4
5
6
    // Guardamos en la BBDD
    $sql = "INSERT into TABLAIMAGENES (nombre_archivo) values ('$nombre')";
    $resultado = mysql_query($sql);
 
    // Por si queremos la ID asignada a la imagen
    $id = mysql_insert_id();

Con esto debería bastar para poder guardar nuestras imágenes en una carpeta que decidamos y además guardar la referencia al nombre de archivo en la base de datos.
Luego para mostrar las imágenes simplemente las llamaras por el nombre en la carpeta /uploads/ o cualquier otra que hayas definido en tu caso.

Si tienes cualquier duda, o hay algo que no has entendido, puedes dejar tu comentario consultando, prometo intentar ayudarte ;)

Si te gustó este post, compártelo:
  • Meneame
  • Twitter
  • Facebook
  • Google Bookmarks
  • Live
  • del.icio.us
  • BarraPunto
  • Technorati
  • Bitacoras.com
Me gusta! A 7 lectores les ha gustado esta entrada.
Loading ... Loading ...

Etiquetado como: , ,

Gravatar

Marcelo Ferreiro


Desarrollador web: me especializo en Diseño web, Maquetación xHTML & CSS y Programación PHP & MySQL, e intento aprender un poco más cada día.

24 comentarios, participa!

  1. Luis Toscano

    19. feb, 2010

    actualizemos el $HTTP_POST_FILES por $_FILES ya que el anterior ya ha sido descontinuado y puede ser un fail en tu desarrollo saludos

  2. Marcelo

    19. feb, 2010

    Gracias Luis, tienes toda la razón, gracias por el comentario, ya procedo a corregirlo en el código del post ;)

    Saludos!

  3. Gerald

    06. may, 2010

    Esto serviria para crear un hosting de imagenes como http://www.tinypic.com o imageshack, photobucket, etc ?

  4. Luis Toscano

    08. may, 2010

    sip con eso y le agregas una que otra mejora y listo

  5. Francisco Machado

    08. jun, 2010

    Hola Marcelo, muy buena explicación, Me gusto mucho el diseño de la pagina, no te enojes si te copio alguna idea para cuando haga la mia. Saludos y a meter tecla.

  6. Oscar

    10. jun, 2010

    hola Marcelo:
    quiero comentarte cual es mi problema, un cliente me ha pedido hacer un sitio en el que sus clientes puedan subir fotos datos, telefono etc desde su computadora. Al sitio de mi cliente por medio de un formulario para mostrarlas. No se nada de php, pero necesitaria un script que me pueda ayudar.
    Espero haber sido claro, desde ya muchas gracias

  7. Marcelo

    10. jun, 2010

    Oscar, todo bien, pero me sorprende que alguien que “no sabe nada de php” (como tu mismo has dicho), acepte un proyecto de desarrollo que incluye (y mucho) PHP…

    Aparte piensa, que si hubiera un script ya hecho, con lo que necesitas… para que te pagarían? o para qué cobrarías si simplemente tomarás algo ya hecho por otra persona y lo pondras en un servidor?

    Francisco, gracias por tus comentarios, y claro que puedes tomar ideas ;) y si algo te es de utilidad se agradece que difundas la web… aunque no es para nada obligación ^_^

  8. joaquin

    30. sep, 2010

    Primero que nada muy bueno este codigo funciona impecable..

    Mi duda es la siguiente ya que lo eh intentado y no puedo..

    Como hacer para en el mismo formulario agregar otros para ingresar textos y que esten en la misma BD o en diferente, Pero que luego puedas imprimir en pantalla la imagen y los demas textos.

    Espero se entienda.

    Salu2..

  9. leonardo

    21. oct, 2010

    Hola, que tal, te pregunto, como se puede hacer para subir un archivo “x” ( documento o imagen ) pero que a la ves se muestre en una pagina “x” que ese mismo se pueda descargar por otras personas?, bueno mandame un mail lo antes posible

    estamos en contacto.
    saludos

  10. axl

    23. oct, 2010

    Puedes completar este buen código????
    Porfavor muestranos como mostrar mediante php las imagenes ya guardadas.
    Muchas gracias

  11. Antonio

    13. nov, 2010

    Hola,

    Tengo un formulario el cual da opcion para subir 6 imagenes y funciona correctamente, pero tengo dos dudas, si no se agrega ninguna imagen y se envia el formulario, ¿Como puedo hacer para que aparezca en el lugar de la imagen, una por defecto? y la siguiente pregunta. Si subo una imagen, una vez publicada, ¿Como puedo hacer para que cuando el usuario pase el raton sobre la imagen, la imagen se agrande?.

    Un saludo y muchas gracias.

  12. danger_cris

    14. nov, 2010

    Muy buen aporte gracias me sacaste de un gran apuro

  13. pepe

    06. dic, 2010

    Muy buenas
    Tengo una duda sobre el codico que aportas, y es que si es seguro para el servidor que el cliente pueda subir imagenes, daria el caso de que cambien la extension a .jpg, .gif..etc para poder subir algo peligroso al servidor, y el codigo de arriba puede prevenir los archivos mal intecionados?

  14. RAy

    09. mar, 2011

    marcelo para mostrarlas solo debes general una consulta de TABLAIMAGENES , solo mostrar sin procesar su contenid?

  15. Diego

    10. mar, 2011

    Hola doy de Costa Rica, muchas gracias por el post, me sirvió de mucho…

  16. Marcelo

    30. may, 2011

    Para quienes consultan como mostrar luego las imágenes, bastaría con hacer un SELECT a la tabla TABLAIMAGENES, lo cuál nos daría el nombre de archivo, y luego le concatenaríamos la ruta en la que están guardadas las mismas ;)

  17. Lalo

    15. jun, 2011

    puedo subir una foto, guargarla en donde se guardan mis archivos php? para ser jalada desde ahi(por ejemplo con el apache) y si es necesario ser usada por un archivo php, por ejemplo para mostrarse en pantalla?

  18. Pedro69

    12. jul, 2011

    Saludos y gracias por el tutorail, Os vais a reir de mi…. he conseguido todo lo dificil del tutorial y me falta lo mas sencillo.

    He realizado tu tutorial paso por paso y para mi asombro ha funcionado todo muy bien hasta la base de datos…. pues bien, la foto me sale reflejada en la base de datos para mi asombro jajajajaja pero no consigo localizarla fisicamente en ninguna de las carpetas del host. En fin saludos y gracias por todo.

  19. ags88

    28. jul, 2011

    hola necesito tu ayuda estoy creando un sistema que permita al asuario poder subir imagenes y mostrarlas en pantalla todo eso con php y mysql puedes ayudarme porfavor.

  20. Fabiola

    05. ago, 2011

    Marcelo este codigo me sirve para luego leer de la base de datos las imagenes guardadas? por que me guarda el nombre , no la ruta, como lo haria para luego mostrar las imagenes guardadas en el servidor leyendo la ruta?

    Gracias!

  21. Yohelvis

    16. ago, 2011

    Amigo me funcionó de maravilla, sin embargo soy nuevo en esto y me gustaría hacer que también se generara un thumbnail de un ancho y alto especifico, que sería necesario agregar al script para lograrlo?

    Gracias de antemano y felicitaciones.

  22. Anika

    23. ago, 2011

    Gracias por el aporte!! Me salvaste la vida!! ;)

  23. pablo

    13. oct, 2011

    Muchas gracias,

    cómo se haría lo que hace miheineken, por ejemplo. Que saliese la imagen en un lugar determinado (dentro de otra)

    Un saludo

  24. Daniel

    15. oct, 2011

    Estaba buscando esto, si funciono gracias mil gracias.

Deja tu opinión