Cómo enviar y recibir variables mediante formularios con PHP, envío de datos por medio de POST. Cómo construir los formularios y cómo recibir los valores mediante el array superglobal $_POST de PHP.
Enviar y recibir variables desde formularios es uno de los comportamientos más básicos que necesitaremos implementar en las aplicaciones web. Este tipo de transferencia es de gran utilidad ya que nos permite interaccionar directamente con el usuario, produciendo entrada de datos a las aplicaciones PHP.
El proceso es similar al explicado para las URLs. Primeramente, presentamos una primera página con el formulario clásico a rellenar y las variables son recogidas en una segunda página que las procesa.
Explicación básica del envío de formularios con PHP
En el proceso de enviar y recibir datos de un formulario existen dos páginas. La que tiene el formulario y la página que lo recibe. La página que contiene el formulario podría ser una página normal HTML. La segunda página, que recibe el formulario, por supuesto tendrá que ser una página PHP.
El formulario tiene un atributo llamado "action" que indica la dirección de la página PHP que recibirá el formulario. Además, si queremos que los datos se envíen por POST, debemos incluir el atributo "method" con el valor "post". Lo puedes ver en el siguiente código HTML.
<form action="pagina-para-recibir.php" method="post">
...
</form>
En los formularios tenemos que incluir los campos que necesitemos. El nombre de los campos, definido por el atributo name de la etiqueta, definirá el nombre de la variable que vamos a recibir más tarde en PHP.
<input type="text" name="midato">
En el campo de texto anterior, hemos indicado name="midato" por lo tanto, el valor lo vamos a recibir con el nombre "midato".
Ya en la página PHP, el campo de formulario lo vamos a recibir con el array superglobal $_POST. Este es un array asociativo que se crea automáticamente por PHP y que está disponible en cualquier lugar del código de la página donde recibimos el formulario. El nombre del campo de formulario es el que usaremos como índice del array $_POST, tal que así.
echo $_POST["midato"];
Ejemplo de envío y recepción por POST en PHP
El siguiente código te ilustra una página HTML con un formulario que se va a enviar a otra página php.
<HTML>
<HEAD>
<TITLE>formulario.html</TITLE>
</HEAD>
<BODY>
<FORM METHOD="POST" ACTION="destino2.php">
Nombre<br>
<INPUT TYPE="TEXT" NAME="nombre"><br>
Apellidos<br>
<INPUT TYPE="TEXT" NAME="apellidos"><br>
<INPUT TYPE="SUBMIT">
</FORM>
</BODY>
</HTML>
Fíjate que la página donde se enviará el formulario se llama "destino2.php". El código de esta página podría ser más o menos como este:
<HTML>
<HEAD>
<TITLE>destino2.php</TITLE>
</HEAD>
<BODY>
<?php
echo "Variable $nombre: " . $_POST["nombre"] . "<br>n";
echo "Variable $apellidos: " . $_POST["apellidos"] . "<br>n"
?>
</BODY>
</HTML>
$_POST
Es como decimos el array mediante el cual recibimos las variables enviadas por POST actualmente. Pero esto no fue siempre así.
A partir de PHP 4.1.0 se pueden recoger las variables de formulario utilizando el array asociativo $_POST, que es el mismo que $HTTP_POST_VARS, pero más corto de escribir.
$HTTP_POST_VARS
En versiones antiguas de PHP se usaba $HTTP_POST_VARS. Recordamos que es posible recopilar en una variable tipo array el conjunto de variables que han sido enviadas al script por este método a partir de la variable de sistema $HTTP_POST_VARS.
echo "Variable $nombre: " . $HTTP_POST_VARS["nombre"] . "<br>n";
Ejemplo de restricción de acceso por edad
Para continuar aportando ejemplos al uso de formularios vamos a realizar una página que muestra solicita la edad del visitante y, dependiendo de dicha edad, permita o no visualizar el contenido de la web. A los mayores de 18 años se les permite ver la página y a los menores no.
El ejemplo es muy sencillo y no valdría tal cual está para utilizarlo a modo de una verdadera restricción de acceso. Únicamente nos sirve para saber cómo obtener datos de un formulario y como tratarlos para realizar una u otra acción, dependiendo de su valor.
La página del formulario, que hemos llamado edad.php tendría esta forma:
<html>
<head>
<title>Restringir por edad</title>
</head>
<body>
<form action="edad2.php" method="post">
Escribe tu edad: <input type="text" name="edad" size="2">
<input type="submit" value="Entrar">
</form>
</body>
</html>
Esta es una página sin ningún código PHP, simplemente tiene un formulario. Fijémonos en el action del formulario, que está dirigido hacia una página llamada edad2.php, que es la que recibirá el dato de la edad y mostrará un contenido u otro dependiendo de ese valor. Su código es el siguiente:
<html>
<head>
<title>Restringir por edad</title>
</head>
<body>
<?
$edad = $_POST["edad"];
echo "Tu edad: $edad<p>";
if ($edad < 18) {
echo "No puedes entrar";
}else{
echo "Bienvenido";
}
?>
</body>
</html>
Esperamos que este otro código tampoco resulte extraño. Simplemente se recibe la edad, utilizando el array $_POST. Luego se muestra la edad y se ejecuta una expresión condicional en función de que la edad sea menor que 18. En caso positivo (edad menor que 18), se muestra un mensaje que informa de que no se deja acceder al página. En caso negativo (mayor o igual a 18) se muestra un mensaje de bienvenida.
Estas son las bases del envío y recepción de datos mediante formularios en PHP. A continuación veremos otras prácticas un poco más avanzadas que usarás cuando quieras recibir los datos de formularios en un array, porque no sepas a ciencia cierta cuántos elementos Input va a tener tu formulario
Rubén Alvarez
Rubén es doctor en química y programador principalmente en sus ratos libres con...