Unidad 11. Formularios y PHP (III)


11.4. Recoger los datos

Estamos utilizando una página en PHP para recoger los datos de un formulario. Vamos a comenzar por ahí.

Al crear el formulario, establecemos el método de envío (method) como post o get. Los datos del formulario llegan a la página PHP a través del array $_POST o $_GET, dependiendo del método de envío. O podemos usar el array $_REQUEST, que sirve para los dos. Por ejemplo, si un control del formulario tenía el nombre (name) email, su valor queda almacenado en $_REQUEST['email'], y podemos tomarlo.

En una instrucción, podemos asignar ese valor a una variable, por ejemplo a la variable $email (en PHP, no es necesario declarar las variables, y todas comienzan con el signo del dólar):

$email = $_REQUEST['email'];

Esto funciona mientras exista el campo email. Pero si no existe, da un error, por ejemplo, si ponemos el nombre de un checkbox, ya que estos controles sólo se envían si están marcados.

Por eso, primero tenemos que confirmar si existe la variable. Para eso, tenemos la función isset(variable). Esta función, devuelve verdadero si existe la variable que le pasamos, y falso si no. La idea es comprobar si existe en $_REQUEST el campo que nos interesa. Si existe, tomamos su valor, y si no, le asignamos uno, aunque sea vacío (""). Así no nos dará error. Por lo tanto, podemos recoger el valor así:

$email = (isset($_REQUEST['email'])) ? $_REQUEST['email']) : "";

Observa que empleamos la estructura variable = (condición) ? "valor si se cumple" : "valor si no"; que ya vimos en JavaScript.

isset es una de las muchas funciones predefinidas en PHP. Puedes ver algunas muy útiles en este avanzado Avanzado.

Como tenemos que repetir esto para cara campo del formulario, podemos crear una función:

function recogeDato($campo) {
  return (isset($_REQUEST[$campo])) ? $_REQUEST[$campo]) : "";
}

$email = recogeDato('email');

De esta manera, nos aseguramos de que no se produzcan errores, aunque los datos que intentemos recoger no existan.

Siguiendo esto, guardamos todos los datos en variables con nombres descriptivos.

 

El paso siguiente es comprobar que los valores sean correctos. Por ejemplo, comprobar que si un campo era requerido no haya quedado vacío:

if ($campo==""){
  // error. El campo no puede quedar vacío
} else {
  // correcto
}

Dependiendo de la finalidad de los datos, se pueden hacer comprobaciones más o menos complejas. Por ejemplo, que un número esté en un rango, que un email tenga formato válido, o que un dato que se guardará en una base de datos, no contenga código malicioso.

 

Una vez comprobados todos los datos, si son correctos, continuamos con la ejecución de la página. En nuestro ejemplo, sólo es enviar un correo, pero podría ser guardar un registro en una base de datos, confirmar una compra, etc.

En caso de que haya errores, lo normal es volver a pedir los datos al usuario. En este caso, sería una ventaja tener también el formulario en un archivo PHP, ya que podríamos marcar directamente los campos erróneos, y podemos mostrar al usuario los datos introducidos para que sólo tenga que corregirlos y no volver a introducirlos.

Con lo que hemos visto, ya podemos crear la página de envío, con el ejercicio paso a paso Recoger datos y enviar un correo.

Para el usuario, resulta molesto tener que enviar el formulario para que se compruebe en el servidor, que se le devuelva con errores, y tener que corregirlos o volver a rellenarlo. Por eso, es una buena idea validarlo primero con JavaScrit antes de enviarlo, como explicamos en este avanzado Avanzado.

En vez de tener el formulario y el PHP en páginas separadas, vamos a unirlos en una página con el ejercicio paso a paso Formulario en PHP. Esto nos permitirá hacer muchas más cosas con el formulario.

 

Con todos estos cambios, nuestro sitio web ha quedado así. Si estás viendo este curso en tu equipo, comprobarás que no se ve bien, ya que vemos el código fuente PHP. Puedes ver cómo quedaría en un servidor capaz de ejecutar el PHP si lo ves en la web de aulaClic, pulsando aquí.


Enero-2010
Pág. 11.3

Atrás  Inicio  Adelante





.