Subir archivos mediante formulario (PHP) Cuando creamos un formulario para recoger información del usuario, en ocasiones queremos permitir que éste pueda subir archivos, como por ejemplo una fotografía para realizar un perfil del usuario. Voy a exponer un código sencillo para el proceso de los archivos subidos por formulario que constará de tres partes: el formulario web, el script de recogida y validación de datos y la página final de resultados.
1 – El formulario web ‘formulario.php’, muy básicamente:
<html> <head><title>Nuevo cliente</title></head> <body> <h3>Datos personales</h3> <br> <form name="formCliente" action="validaNuevoCliente.php" method="POST" enctype="multipart/form-data"> Nombre y apellidos: <input type="text" name="textNombre" /> <br /> DNI: <input type="text" name="textDNI" /><br /> Fotografía: <input type="file" name="fileFoto"><br /> <input type="submit" name="action" value="Enviar" /> </form> <?php if($_GET['error'] != "") echo "<p>Error: ".$_GET['error']."</p>"; ?> </body> </html>
2 – El script que recibe y valida ‘validaNuevoCliente.php’:
<html> <head></head> <body> <?php ob_start(); $nombre = $_POST['textNombre']; $dni = $_POST['textDNI']; $action = $_POST['action']; $fileName = $_FILES['fileFoto']['name']; $fileSize = $_FILES['fileFoto']['size']; //validamos if ($action != "Enviar") sendError(""); if ($nombre == "") sendError("Nombre incorrecto"); if ($dni == "") sendError("DNI incorrecto"); if ($fileName == "") sendError("Archivo no válido"); if ($fileSize == 0 || $fileSize > 1000000) sendError("Tamaño de archivo no válido"); //guardamos la información en la base de datos... //guardamos el archivo en la carpeta adecuada if (!move_uploaded_file( $_FILES['fileFoto']['tmp_name'], "imagenes/clientes/$fileName") ) sendError("Error guardando el archivo"); header ("Location: resultado.php"); exit(); function sendError($message){ header("Location: formulario.php?error=$message"); exit(); } ?> </body> </html> <?php ob_end_flush(); ?>
3 – Página de resultado ‘resultado.php’:
<html> <head><title>Alta cliente</title></head> <body> <h3>Enhorabuena, ha sido dado de alta</h3> </body> </html>