Curso de PHP
Tema 3: Formularios José Mariano González Romano
[email protected]
Tema 3: Formularios 1. 2. 3. 4.
Acceso a formularios HTML desde PHP El formulario de PHP Subida de ficheros al servidor Validación de los datos de un formulario
Acceso a formularios desde PHP
Desde PHP se puede acceder fácilmente a los datos introducidos desde un formulario HTML Veámoslo con un ejemplo simple
Acceso a formularios desde PHP
Fichero uno.php
Fichero dos.php
Acceso a formularios desde PHP
Acceso a formularios desde PHP
A partir de PHP 4.2.0, el valor por defecto de la directiva de PHP register_globals es off Esto tiene una gran importancia sobre los formularios, ya que no es posible acceder a las variables enviadas de la manera anterior (como variables globales). En su lugar hay que utilizar la variable predefinida de PHP $_REQUEST, escribiendo $_REQUEST[‘edad’] en lugar de $edad Se puede poner register_globals = on en el fichero de configuración php.ini, pero no es recomendable por motivos de seguridad. Una alternativa que permite hacer mínimos cambios en el código ya existente es la siguiente: $edad = $_REQUEST[‘edad’];
Acceso a formularios desde PHP
Fichero uno.php
Fichero dos.php
Acceso a formularios desde PHP
Ejercicio 1: formulario simple –
Ilustra cómo acceder a los valores introducidos desde un formulario HTML
Acceso a formularios desde PHP
Acceso a los diferentes tipos de elementos de entrada de formulario –
Elementos de tipo INPUT • • • • • • • •
–
Elemento SELECT •
–
TEXT RADIO CHECKBOX BUTTON FILE HIDDEN PASSWORD SUBMIT Simple / múltiple
Elemento TEXTAREA
Acceso a formularios desde PHP
TEXT Introduzca la cadena a buscar:
Acceso a formularios desde PHP
RADIO Sexo:
Mujer
Hombre
Acceso a formularios desde PHP
CHECKBOX
Garaje
Piscina
Jardín
\n”); //foreach ($extras as $extra) //print (“$extra
\n”); ?>
Acceso a formularios desde PHP
BUTTON
Acceso a formularios desde PHP
FILE
Acceso a formularios desde PHP
HIDDEN \n”); ?>
Acceso a formularios desde PHP
PASSWORD Contraseña:
Acceso a formularios desde PHP
SUBMIT
Acceso a formularios desde PHP
SELECT simple Color: <SELECT NAME=“color">
Rojo Verde Azul
Acceso a formularios desde PHP
SELECT múltiple Idiomas: <SELECT MULTIPLE SIZE="3" NAME="idiomas[]"> Inglés Francés Alemán Holandés
\n”); //foreach ($idiomas as $idioma) //print (“$idioma \n”); ?>
Acceso a formularios desde PHP
TEXTAREA Comentario:
Acceso a formularios desde PHP
Ejercicio 2: programa que muestra los datos introducidos desde un formulario –
Ilustra cómo acceder a los valores introducidos desde todos los tipos de elementos de entrada de un formulario, con excepción de los tipos BUTTON y FILE, que se tratan en ejercicios posteriores
El formulario de PHP
La forma habitual de trabajar con formularios en PHP es utilizar un único programa que procese el formulario o lo muestre según haya sido o no enviado, respectivamente Ventajas: – –
Disminuye el número de ficheros Permite validar los datos del formulario en el propio formulario
Procedimiento: si se ha enviado el formulario: Procesar formulario si no: Mostrar formulario fsi
El formulario de PHP
Esquema de funcionamiento: a)
b)
si se ha enviado el formulario: Procesar formulario
si no: Mostrar formulario fsi
– –
La 1ª vez que se carga la página se muestra el formulario (a) La 2ª vez se procesa el formulario (b)
El formulario de PHP
Para saber si se ha enviado el formulario se acude a la variable correspondiente al botón de envío. Si este botón aparece de la siguiente forma en el formulario HTML:
entonces la condición anterior se transforma en: if (isset($enviar))
o bien if ($enviar == “procesar”)
El formulario de PHP
Ejercicio 3: formulario de PHP –
Ilustra cómo crear páginas multipropósito que sirven tanto para mostrar un formulario como para procesarlo
Subida de ficheros al servidor
Para subir un fichero al servidor se utiliza el elemento de entrada FILE Hay que tener en cuenta una serie de consideraciones importantes: – –
El elemento FORM debe tener el atributo ENCTYPE="multipart/form-data“ El fichero tiene un límite en cuanto a su tamaño. Este límite se fija de dos formas diferentes: • •
En el fichero de configuración php.ini En el propio formulario
Subida de ficheros al servidor php.ini ;;;;;;;;;;;;;;;; ; File Uploads ; ;;;;;;;;;;;;;;;; ; Whether to allow HTTP file uploads. file_uploads = On ; Temporary directory for HTTP uploaded files (will use ; system default if not specified). ;upload_tmp_dir = ; Maximum allowed size for uploaded files. upload_max_filesize = 2M
formulario
Subida de ficheros al servidor
Consideraciones (cont) –
–
Debe darse al fichero un nombre que evite coincidencias con ficheros ya subidos. Por ello, y como norma general, debe descartarse el nombre original del fichero y crear uno nuevo que sea único El fichero subido se almacena en un directorio temporal y hemos de moverlo al directorio de destino usando la función move_upload_file()
Procedimiento: si se ha subido correctamente el fichero: Asignar un nombre al fichero Mover el fichero a su ubicación definitiva si no: Mostrar un mensaje de error fsi
Subida de ficheros al servidor HTML
La variable $_FILES contiene toda la información del fichero subido: –
$_FILES['imagen']['name'] •
–
$_FILES['imagen']['type'] •
–
Tamaño en bytes del fichero subido
$_FILES['imagen']['tmp_name'] •
–
Tipo mime del fichero. Por ejemplo, "image/gif"
$_FILES['imagen']['size'] •
–
Nombre original del fichero en la máquina cliente
Nombre del fichero temporal en el que se almacena el fichero subido en el servidor
$_FILES['imagen’]['error'] •
Código de error asociado al fichero subido
Subida de ficheros al servidor PHP if (is_uploaded_file ($_FILES['imagen']['tmp_name'])) { $nombreDirectorio = "img/"; $idUnico = time(); $nombreFichero = $idUnico . "-" . $_FILES['imagen']['name']; move_uploaded_file ($_FILES['imagen']['tmp_name'], $nombreDirectorio . $nombreFichero); } else print ("No se ha podido subir el fichero\n");
Subida de ficheros al servidor PHP if (is_uploaded_file ($_FILES['imagen']['tmp_name'])) { $nombreDirectorio = "img/"; $nombreFichero = $_FILES['imagen']['name']; $nombreCompleto = $nombreDirectorio . $nombreFichero; if (is_file($nombreCompleto)) { $idUnico = time(); $nombreFichero = $idUnico . "-" . $nombreFichero; } move_uploaded_file ($_FILES['imagen']['tmp_name'], $nombreDirectorio . $nombreFichero); } else print ("No se ha podido subir el fichero\n");
Subida de ficheros al servidor
Ejercicio 4: subida de un fichero al servidor –
Ilustra cómo subir ficheros a un servidor, cómo controlar su tamaño, cómo crear un nombre único para el fichero y cómo almacenarlo en el lugar deseado
Validación de formularios
Toda la información proveniente de un formulario debe considerarse por norma como contaminada, y hay que validarla antes de darla por buena y procesarla Lo más eficiente es mostrar los errores sobre el propio formulario para facilitar su corrección. Procedimiento: si se ha enviado el formulario: si hay errores: Mostrar formulario con errores si no: Procesar formulario fsi si no: Mostrar formulario fsi
Validación de formularios
Este procedimiento se puede resumir para que sólo haya que mostrar una vez el formulario, bien con los valores por defecto o con los valores introducidos, y con los errores en su caso: si se ha enviado el formulario: validar datos fsi si se ha enviado el formulario y no hay errores: Procesar formulario si no: Mostrar formulario con valores por defecto o ya enviados fsi
Validación de formularios
Esquema de funcionamiento: a)
b)
c)
si se ha enviado el formulario: validar datos fsi si se ha enviado y no hay errores: Procesar formulario
si no: Mostrar formulario fsi
– –
La 1ª vez que se carga la página se muestra el formulario (a) La 2ª y sucesivas veces se validan los datos • Si hay errores, se muestra de nuevo el formulario con los errores (b) • Si no hay, se procesa el formulario (c)
Validación de formularios
Ejercicio 5: validación de los datos introducidos en un formulario –
Ilustra cómo realizar una validación de los datos introducidos en un formulario en el propio formulario