Autollamada de páginas
Páginas que se llaman a si mismas pasando datos por POST o GET: formularios reentrantes y variables pasadas por URL a la misma página.
24/4/04 - 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.
Se puede ver el ejemplo en funcionamiento en una página aparte.
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. Para comprenderla más fácilmente será interesante verla en funcionamiento.
<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 II.
Seguir navegando a partir aquí:
+ 1 manual relacionado
+ 1 categoria relacionada
+ 3 comentarios (Añadir)
+ 24 comentarios no revisados
| Autoría, licencia y acciones sobre este artículo |
|
Informe de Miguel Angel Alvarez* Director de DesarrolloWeb.com
Atención: Contenido exclusivo de DesarrolloWeb.com. No reproducir. Copyright.
* Para consultas técnicas utilizar la lista de correo.
|
Manuales relacionados con este artículo
Categorias relacionadas
A través de las categorías de nuestro directorio se pueden encontrar otro tipo de recursos relacionados con este artículo:
+ Entrar en
Manuales de PHP
Comentarios de los visitantes
|
Los comentarios de los visitantes son para ampliar la información del artículo. Cualquiera puede participar.
|
| Se muestran 3 comentarios revisados |
Comentario de pedro
26/6/04
existe algún método para llamar a otro programa .php sin tener que pulsar un "aceptar" o una referencia? esto es, por ejemplo:
if (condición) {
ejecutar X.php
}
Comentario de Aldíbier
05/3/05
En el primer ejemplo no se si entedí mal, pero no se uspone que si el formulario no contiene datos, deve volver al mismo?, al probarlo lo hice con datos y funcionó perfectamente, pero al dejar el formulario sin datos, lo que me muestra es como si contuviera datos, entonces me muestra
Su nombre:
Su empresa:
Su Teléfono:
vuelvo y hago la misma pregunta, no se supone que volvería al formulario?
RESPUESTA
Efectivamente no vuelve, estamos repasando el codigo.
Comentario de DandaveX
24/12/06
No funciona al poner if (!$_POST){... porque la variable $_POST aunque no tiene valores contiene las claves (nombre, empresa, telefono), por lo tanto la variable $_POST nunca estará vacía.
Para comprobar únicamente si existen los valores de esa variable se puede hacer como explica Manuel Ibáñez en su comentario. O de la siguiente forma si con un solo valor (de los 3 que hay) nos conformamos:
<html>
<head>
<title>Me llamo a mi mismo...</title>
</head>
<body>
<?
Foreach ($_POST as $clave=>$valor);
if (!$valor){
?>
<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>
| Comentarios sin revisar |
|
Entre los comentarios no revisados puede haber algunos interesantes que se hayan enviado recientemente.
|
Se han encontrado 24 comentarios sin revisar
Ir arriba