Desarrollo

Recogida de datos de formularios en PHP

Desarrollo HTML PHP

Definido nuestro formulario, vamos con el plato fuerte, la recogida de datos de formularios. Nuestra página web tiene ahora el formulario que hemos creado anteriormente como ejemplo. El usuario rellena los datos y le da al botón para enviar el formulario. Se procede, entonces, a ejecutar tratamiento.php en este caso, que es donde tenemos toda la lógica de nuestro programa en PHP.

¿Cómo obtenemos los datos enviados por el formulario desde PHP? Gracias al array ya predefinido $_REQUEST. Este array contendrá una serie de elementos en los cuales, sus índices, corresponderán al campo name de los <input> del formulario enviado. Podemos ver más información sobre él en el manual de PHP.

Recepción de los datos de texto

Por ejemplo, si en el <input> que hemos llamado nombre colocáramos Juan y enviáramos el formulario, desde PHP podríamos acceder a este dato desde $_REQUEST[‘nombre’] que nos dolvería el string ‘Juan’. Es indiferente si el formulario ha sido enviado con el método get o el método post, pues a efectos prácticos es lo mismo. La única diferencia es que, con el método get, veremos en nuestra URL todos los datos enviados (y no siempre vamos a querer ésto…).

Eso sí, estos dos métodos tienen algunas sutiles diferencias más que veremos en este mismo artículo más abajo.

Como hemos comentado, para acceder al <input> donde hemos enviado texto nos vale con la consulta a $_REQUEST. Si queremos acceder a los demás <input> que reciben texto, como el tipo password o el tipo email, también lo haríamos de la misma forma. De igual manera, el texto enviado desde <textarea> también se recibe así.

Cuidado
Ten muy en cuenta que el campo de tipo password contiene la contraseña y conviene no mostrarla. Un buen programa encriptará esta contraseña antes de guardarla.

Recepción de los datos de un checkbox y de un radio

Para los datos que vienen desde un <input> de tipo checkbox el array es el mismo, $_REQUEST, pero tenemos que saber qué va a contener. Si no hemos marcado la casilla, no aparecerá nada en el array que recibe los datos. En cambio, si hemos marcado la casilla obtendremos de nuevo su valor con un índice que equivaldrá al name con el que habíamos nombrado al <input>.

¿Qué pasa si no hemos indicado un valor con value? Pues que la casilla marcada tendrá como valor el string ‘on’. Por el contrario, si le hemos indicado un valor, sera éste el que recibiremos en $_REQUEST.

En el caso de los datos de tipo radio el concepto es el mismo. Si no hay valor, sólo devolvería si está marcado el string ‘on’ y nada si no lo está. Pero en este caso no nos interesa esta función, sino que queremos saber cuál está marcado, por lo que nos interesa definir un value. Además, por eso hemos colocado el name igual en el ejemplo anterior, puesto que sólo queremos que uno de los dos esté marcado.

Recepción de los datos de un <select>

No hay mucho secreto ni grandes diferencias con los casos anteriores. A la hora de recibir un <select>, tendremos en nuestro array $_REQUEST un elemento cuyo índice será el valor del name de <select> y el valor será el valor de value del elemento que hayamos seleccionado. Así de simple.

En el caso de un multiselect, el concepto es el mismo sólo que el valor será un nuevo array con todas las opciones que hayamos seleccionado.

Otras recepciones de datos

Hemos visto las recepciones de datos más comunes y, cierto es, tienen poco secreto. Nuestro array $_REQUEST recibirá todo lo que necesitamos para poder operar. La recepción que explicaremos más adelante en otros artículos será una que requiere algo más de desarrollo. No es otra que la de tipo file, pues al recibir un archivo y tener que guardarlo “en algún lado”, deberemos realizar más pasos y comprobaciones.

Y por fin tuvimos todos los datos

Exacto. Por fin hemos podido solicitar datos al usuario y recogerlos desde PHP. Ahora, una vez con estos datos, podremos incorporarlos a nuestros programas para que sean más prácticos. Ejemplos donde colocábamos datos de prueba o incluso en los retos de A practicar… donde éramos nosotros los que colocábamos unos datos para probarlos, cambiarán ahora que podemos pedírselos al usuario.

Con el ejemplo de formulario del anterior artículo, podríamos acceder a todos los datos que nos proporciona de esta forma:

<?php

$nombre = $_REQUEST['nombre'];
$usuario = $_REQUEST['usuario'];
$correo = $_REQUEST['correo'];
$password = $_REQUEST['password'];
$suscripcion = $_REQUEST['suscripcion'];
$genero = $_REQUEST['genero'];
$edad = $_REQUEST['edad'];
$descripcion = $_REQUEST['descripcion'];

?>

Y ahora ya podríamos operar con ellos.

Programa que resuelve ecuaciones de primer grado

Para finalizar el artículo y practicar la recogida de datos de formularios, vamos a realizar un simple programa que resuelve una ecuación de primer grado pidiendo los datos al usuario.

Por una parte, tenemos nuestro archivo ecuacion.html que contendrá el formulario HTML (hemos omitido las cabeceras, etiquetas básicas y demás aspectos que debería llevar porque funciona igual para lo que pretendemos):

<form action="resolucion.php" method="post">
  <p>Introduce el valor de a: <input type="number" name="valor_a" required></p>
  <p>Introduce el valor de b: <input type="number" name="valor_b" required></p>
  <input type="submit" value="Resolver">
</form>

Y luego tenemos nuestro archivo que, como habéis visto, se llamará resolucion.php y que contendrá toda la lógica de la programación en PHP:

<?php

$a = $_REQUEST['valor_a'];
$b = $_REQUEST['valor_b'];

echo 'La solución es ' . $b / $a;

?>

Ahora, cuando accedamos desde el navegador a ver ecuacion.html, nos encontraremos con el formulario sencillo que hemos colocado. Rellenaremos los datos, que hemos indicado que sean obligatorios, y pulsaremos en el botón Resolver. A continuación, ésto nos lleva a ejecutar el archivo resolucion.php el cual recibirá los valores, los cuales los hemos guardado en las variables $a y $b e imprimirá por pantallá la solución.

Y no hay más. Podremos ir a ecuacion.html todas las veces que queramos para probar los distintos valores.

Pero aún falta mucho por hacer

Y no menos importante, pues la seguridad en la recogida de datos de formularios será una parte fundamental en todo programa que aspire a recibir datos de los usuarios. No sólo para saber que los datos estén bien, sino por los posibles ataques que podamos sufrir desde esta vía.

Algunas diferencias entre get y post

Como hemos comentado, a efectos prácticos en la mayoría de ocasiones no veremos más diferencias entre estos dos métodos más allá de la visualización en la URL de los parámetros enviados por get. Pero hay algunas diferencias más.

Por ejemplo, el método get no permite reenviar los datos en una recarga de página. Si pulsamos en actualizar página en un formulario enviado con el método post, veremos el típico mensaje de alerta de si queremos volver a reenviar los datos, es decir, volver a enviar el formulario. No ocurre así con el método get.

Otras diferencias son que el método get puede ser marcado (no nos preocupará mucho ésto normalmente) y también puede ser cacheado, al tener sus parámetros en la URL, cosa que no ocurre en el método post. Por ello, también es cierto que con el método get la URL se guardará en el histórico del navegador con todos los datos introducidos, lo cual también puede ser peligroso.

Algunas restricciones para el método get son a nivel de URL. Con este método no podemos crear formularios enormes, pues las URLs tienen una limitación habitual de 2048 caracteres. Un formulario get con muchos campos o donde tuviéramos un campo de texto enorme, acabaría cortado. No ocurre lo mismo en post, donde se envía todo. De igual manera, con el método post no tenemos restricciones en cuanto a caracteres, mientras que en get sólo se permiten caracteres de la tabla ASCII.

Por último, y como hemos comentado, el método get es menos seguro por exponer la información en la URL y ser visible para todos. Imaginad una contraseña enviada por get y siendo visible para cualquier curioso que tengas cerca…

Así que, en general, para la recogida de datos en formularios utilizaremos el método post.

$_POST y $_GET

Aún podemos apurar más la recepción de datos con los arrays $_POST y $_GET. Estos se consideran de mejor utilización que el general $_REQUEST, pues contienen directamente los datos enviados por post (en el array $_POST) y los datos enviados por get (en el array $_GET).

Por tanto, una forma de asegurarnos que un formulario recibe un dato por alguno de estos dos métodos es usar el array correspondiente que los recoge en lugar del array general. Si queremos realizar bien la recogida de datos en formularios, no está de más conocer las diferentes formas de realizarla.

Conclusión

Ahora nuestros programas serán más dinámicos, pues los datos podrán ser los que el usuario necesita. En próximos artículos, procederemos, además de a practicar con los formularios, también a validar sus datos, comprobar la seguridad y mostrarlos por pantalla. No olvidéis visitar el índice de contenidos para ver cuándo se publicarán.

Deja una respuesta