Subir imágenes mediante PHP
Fecha: 10-Ene-2010 | Autor: Marcelo.
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:
- Recibir los datos de la imagen mediante $_FILES.
- Guardará la imagen en la ruta que le indiquemos (el directorio debe tener permisos de escritura [CHMOD 0777]).
- 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 ;)
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
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!