> Manuales > Manual de PHP

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.

Procesar variables de formularios. POST en PHP

Enviar 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

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";
Nota: En algunas configuraciones, aunque poco habituales, de PHP se generan automáticamente las variables enviadas por formulario en la página de destino. Ocasionalmente puedes verlo así en algunos ejemplos en la web, pero no es una buena práctica realmente. No siempre se definen automáticamente las variables recibidas por el formulario en las páginas web, depende de una variable de configuración de PHP: register_globals, que tiene que estar activada para que así sea. Ver comentarios del artículo al final de la página para más información.
Nota: Aunque podamos recoger variables con este array asociativo o utilizar directamente las variables que se definen en nuestra página, resulta más seguro utilizar $HTTP_POST_VARS por dos razones, la primera que así nos aseguramos que esa varible viene realmente de un formulario y la segunda, que así nuestro código será más claro cuando lo volvamos a leer, porque quedará especificado que esa variable estamos recibiéndola por un formulario.

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.

Rubén Alvarez

Rubén es doctor en química y programador aficionado con experiencia en PHP.

Manual