> Manuales > Manual de PHP

Cómo mantener en una misma página PHP el formulario y el código que recibe los datos. Técnica que podremos usar para mejorar la aplicación al enviar datos POST o GET. Realizaremos formularios reentrantes y variables pasadas por URL a la misma página.

Al incluir un formulario en una página se debe indicar, a través del atributo action, el nombre del archivo PHP al que enviaremos los datos escritos en el formulario. De este modo, para un esquema de envío de datos por formulario, pueden participar dos páginas: una que contiene el formulario y otra que recibe los datos de dicho formulario.

Lo mismo ocurre cuando enviamos variables por una URL. Tenemos una página que contendrá el enlace y otra página que recibirá y tratará esos datos para mostrar unos resultados.

En el presente artículo vamos a ver cómo se puede enviar y recibir datos de un formulario con una única página. Asimismo, veremos como en la misma página podemos tener enlaces con paso de variables por URL y además, podemos recoger y tratar esos datos con la misma página. A este efecto podemos llamarte "autollamada de páginas", también se le suele llamar como "Formularios reentrantes" o términos similares. Es muy interesante conocer el modo de funcionamiento de estos scripts, porque serán muy habituales en nuestras páginas PHP y ayudan mucho a tener los códigos ordenados.

En ambos casos, para formularios o envío de datos por la URL, se debe seguir un esquema como este:

- Comprobar si recibo datos por URL o por formulario
- Si no recibo datos
  - Muestro el formulario o los enlaces que pasan variables.
- Si recibo datos
  - Entonces tengo que procesar el formulario o las variables de la URL

Para un formulario

Veamos a continuación como sería el código de un formulario reentrante.

<html> 
<head> 
   	<title>Me llamo a mi mismo...</title> 
</head> 

<body> 
<? 
if (!$_POST){ 
?> 
   	<form action="auto-llamada.php" method="post"> 
   	Nombre: <input type="text" name="nombre" size="30"> 
   	<br> 
   	Empresa: <input type="text" name="empresa" size="30"> 
   	<br> 
   	Telefono: <input type="text" name="telefono" size=14 value="+34 " > 
   	<br> 
   	<input type="submit" value="Enviar"> 
   	</form> 
<? 
}else{ 
   	echo "<br>Su nombre: " . $_POST["nombre"]; 
   	echo "<br>Su empresa: " . $_POST["empresa"]; 
   	echo "<br>Su Teléfono: " . $_POST["telefono"]; 
} 
?> 
</body> 
</html>

En el ejemplo, el primer paso es conocer si se están recibiendo o no datos por un formulario. Para ello se comprueba con un enunciado if si existe o no una variable $_POST.

En concreto if (!$_POST) querría decir algo como "Si no existen datos venidos de un formulario". En caso de que no existan, muestro el formulario. En caso de que sí existan, recojo los datos y los imprimo en la página.

Para paso de variables por URL

La idea es la misma. Comprobar con un enunciado if si se reciben o no datos desde una URL. Veamos el código a continuación. Se trata de una página que muestra una serie de enlaces para ver las tablas de multiplicar de el 1 hasta el 10. Cada uno de los enlaces muestra una tabla de multiplicar. Pulsando el primer enlace podemos ver la tabla del 1, pulsando el segundo la tabla del 2, etc.

Recordemos que la página se llama a si misma, consiguiendo concentrar todo el código en el mismo archivo PHP, lo que facilita el mantenimiento de la aplicación y centraliza todo el procesamiento en un único lugar.

<html> 
<head>    	<title>Tablas de multiplicar</title> 
</head> 

<body> 
<? 
if (!$_GET){ 
   	for ($i=1;$i<=10;$i++){ 
      	echo "<br><a href='ver_tabla.php?tabla=$i'>Ver la tabla del $i</a>\n"; 
   	} 
} else { 
   	$tabla=$_GET["tabla"]; 
?> 
   	<table align=center border=1 cellpadding="1"> 
<?	
   	for ($i=0;$i<=10;$i++){ 
      	echo "<tr><td>$tabla X $i</td><td>=</td><td>" . $tabla * $i . "</td></tr>\n"; 
   	} 
?> 
   	</table> 
<? 
} 
?>	
</body> 
</html>

Este código es un poco más complicado, porque hace un poco más de cosas que el anterior, pero para el asunto que nos ocupa que es la autollamada de páginas, todo sigue igual de simple.

Hay que fijarse en el if que comprueba si se reciben o no datos por URL: if (!$_GET), que querría decir algo como "Si no se reciben variables por la URL".

En caso positivo (no se reciben datos por URL) se muestran los enlaces para ver cada una de las tablas y en caso de que sí se reciban datos, se muestra la tabla de multiplicar del número que se está recibiendo en la URL.

Para hacer para mostrar los enlaces y las tablas de multiplicar se utilizan bucles for, que esperamos que no resulten desconocidos para el lector. Puede conocerse algo más sobre los bucles for en Control del flujo en PHP: Bucles.

Miguel Angel Alvarez

Fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Com...

Manual