Introducción
Hasta ahora, en los capítulos anteriores, hemos visto cómo construir diversos
programas en PHP con un limitado radio de acción. La verdadera
potencia del lenguaje reside en la aplicación de las técnicas aprendidas a
través de varias páginas Web, pasando información de unas a otras. Como
veremos más adelante, las dos técnicas principales son el uso de formularios
y la utilización de la barra de dirección para pasar los valores.
Argumentos GET
Los argumentos GET pasan la información como parte de la URL. Cuando
utilice esta forma de trabajar, las parejas de variable / valor podrán verse
en la casilla de dirección del navegador. Para probar esto podemos escribir
un pequeño script que guardaremos como página Web.
<html>
<body>
<?php
echo "Variables pasadas mediante GET:<br>";
foreach ($_GET as $indice => $valor) {
echo "$indice : $valor";
}
?>
</body>
</html>
Si ejecuta el código anterior, verá que únicamente se imprime en pantalla
el texto que muestra la orden echo. En realidad esto es correcto, puesto
que no hemos introducido ninguna variable tipo GET a la Web. Para hacerlo
debemos escribir el nombre de la página Web seguido de un símbolo
de interrogación (?) y el conjunto de parejas de variable / valor separadas
del símbolo (&).
La dirección queda algo así: f o r m u l a r i o . php? v a r i a b l e l = H o l a
Mundo&variable2 = 1234. Ahora el resultado es diferente. El bucle f o r
e a c h inspecciona el array $_GET e imprime en pantalla:
Variables pasadas mediante GET:
variablel : Hola Mundo
variable2 : 1234
El array $_GET es considerado en PHP 5 una variable súper-global. Este,
en concreto, almacena todas las variables pasadas entre páginas mediante el método GET. Para extraer el valor de una variable pasada por este método
sólo hay que escribir $_GET [ " n o m b r e _ v a r i a b l e " ] en la página
que recibe los datos.
Advertencia:
En versiones anteriores de PHP, para recuperar el valor de una
variable, simplemente había que escribir un símbolo $ delante del
nombre como $nombre_variable. Esto es porque el parámetro
register_globals del fichero de configuración php . i ni
está, en PHP 5, a off.
Formularios con GET
La forma más utilizada para recabar información acerca de los usuarios es
emplear formularios HTML. Los formularios pueden hacerse escribiendo
en un editor de texto las etiquetas HTML o utilizando algún editor Web
profesional como Macromedia Dreamweaver, Netscape Composer o Nvu.
La siguiente página Web, llamada f o r m u l a r i o .php, muestra cómo recoger
información:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loóse.dtd">
<html>
<body>
<p>Introduzca sus datos personales : </p>
<form name="formulario" method="GET" action="formulario2 .php" >
<table width="50%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="24%">Nombre</td>
<td width="76%"xinput name="nombre" type="text" id="nombre"x/td>
</tr>
<tr>
<td>Apellidos</td>
<tdxínput name="apellidos" type="text" id="apellidos2"></td>
</tr>
<tr>
<td>Correo</td>
<tdxinput name="correo" type="text" id= "correo" x/td>
</tr>
<tr>
<td>Estado civil </td>
<tdxselect name= "estado" id= "estado" >
<option value="Soltero">Soltero</option>
<option value="Casado">Casado</option>
•coption value="Divorciado">Divorciado</option>
<option value="Viudo">Viudo</option>
</select></td>
</tr>
<tr>
<td>Número hijos </td>
<td> 0 <input name="hijos" type="radio" value="0" checked>
1 <input name="hijos" type="radio" value="l">
2 <input name="hijos" type="radio" value="2">
3 <input name="hijos" type="radio" value="3"></td>
</tr>
<tr>
<td>Gustos</td>
<td> Informática <input type="checkbox" name="gustos [] "
value="Informática">
Buceo <input type="checkbox" name="gustos [] " value="Buceo">
Magia <input type="checkbox" name="gustos [ ] " value="Magia">
Jazz <input type="checkbox" name="gustos [] " value="Jazz"></td>
</tr>
<tr>
<tdxinput type="submit" name="Submit" value="Enviar"></td>
<td> </td>
</tr>
</table>
</form>
<p> </p>
</body>
</html>
La figura 8.1 muestra el aspecto en el navegador. Hay varios aspectos a
tener en cuenta. Lo primero es que el apartado a c t i o n de la etiqueta
<FORM> contiene la página Web a la que se enviarán los datos y el apartado
method permite seleccionar el método de envío; por ahora utilizaremos
el método GET. La página f o r m u l a r i o 2 . php recoge la información
del formulario y la imprime en pantalla utilizando un bucle f o r e a c h a la
variable súper-global $_GET.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loóse.dtd">
<html>
<body>
<p>Datos introducidos:</p>
<?php
foreach ($_GET as $indice => $valor) {
echo "$indice: $valor<br>";
}
?>
</body>
</html>
Para sacar los datos hemos utilizado un bucle que busca todos los valores
dentro de $__GET. Otra forma de hacerlo es imprimir los datos uno a uno si sabemos el nombre de las variables definidas en el formulario anterior
de la siguiente forma: $_GET [ "nombre"], $_GET [ " a p e l l i d o s " ],
$_GET [ " c o r r e o " ].
Existen en el formulario visto varias técnicas de recogida de información.
Los cuadros de texto, que permiten escribir valores alfanuméricos, lista
de selección y botones de opción, es donde podemos elegir una de las
opciones existentes y casillas de verificación que permiten elegir 0 o más
opciones existentes. Todas estas partes del formulario tienen una variable
asociada que puede buscarse en $_GET.
El único método que puede plantear algún problema es el que utiliza casillas
de verificación. Puesto que podemos elegir varias opciones, éstas son
enviadas como un array y deben recuperarse atendiendo a esta razón.
Advertencia:
Para que los valores de las casillas de verificación sean enviados
como array hay que declararlas en el formulario como tal, escribiendo
dos símbolos de corchetes en la propiedad ñame asociada a
las casillas; por ejemplo: < i n p u t t y p e = " c h e c k b o x "
name="gustos [] " v a l u e = " I n f o r m á t i c a " > .
La página f o r m u l a r i o 2 . php queda de esta forma, para que pueda recibir
los gustos de los usuarios:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loóse.dtd">
<:html>
<body>
<p>Datos introducidos : </p>
<?php
foreach ($_GET as $indice => $valor) {
echo "$indice: $valor<br>" ;
}
echo "<br>GUSTOS:<br>";
$gustos = $_GET["gustos"];
foreach ($gustos as $indice => $valor) {
echo "$indice: $valor<br>";
}
?>
</body>
</html>
La figura 8.3 muestra la mejora incluida en el programa. Ahora es capaz
de recuperar los gustos de los usuarios e imprimirlos en pantalla. Para esto hemos añadido un bucle nuevo que inspecciona los valores enviados al
array $gustos.
Paso de información con GET
Si se fija en la barra de dirección de los navegadores cuando visita páginas
Web sobre noticias o carritos de la compra, en la URL van apareciendo
variables que tienen que ver con los distintos menús que existen en la
Web.
El siguiente ejemplo muestra una pequeña revista digital escrita en pocas
líneas y en una sola página Web que cambia sus noticias eligiendo las distintas
opciones del menú.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 TransitÍonal//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<body>
<?php
$menu = array (1 => "Editorial", 2 => "Opinión", 3 =>
"Regional", 4 => "Nacional");
echo ("--Revista Digital --<brxbr>") ;
echo ("--MENU--<br>" ) ;
foreach ($menu as $indice => $valor) {
echo ("<a href = \"Índex.php?menu=$indice\">$valor</axbr>") ;
\
j
echo ( "<br>--NOTICIAS--<br>") ;
switch ($_GET["menú"]) {
case 1 :
echo ("Editorial") ;
break;
case 2 :
echo ("Opinión");
break;
case 3:
echo ("Regional");
break;
case 4 :
echo ("Nacional");
break;
default:
echo ("Noticias de Portada");
break;
}
?>
</body>
</html>
El array $menu se carga de los distintos valores que podemos ir seleccionando.
En la actualidad estos valores se suelen extraer de una base de datos.
Para mostrar el menú se hace un bucle donde se extraen todos los valores
e índices del array y se ponen como valores en los enlaces.
echo ("<a href=\"Índex.php?menu=$indice\">$valor</axbr>");
Los enlaces siempre se dirigen a la página principal, pero con un valor
distinto en la variable menú.
La segunda parte de la Web es una elección múltiple mediante la estructura
s w i t c h , donde, en función del valor de la variable menú pasada por
GET, se eligen unas noticias vi otras.
echo ("<a href=\"Índex.php?menu=$indice\">$valor</axbr>");
Los enlaces siempre se dirigen a la página principal, pero con un valor
distinto en la variable menú.
La segunda parte de la Web es una elección múltiple mediante la estructura
s w i t c h , donde, en función del valor de la variable menú pasada por
GET, se eligen unas noticias u otras.
Argumentos POST
La utilización del método GET es totalmente inseguro, porque no hay forma
de ocultar datos privados en la dirección Web, tales como la contraseña
de entrada o el número de cuenta bancaria.
El método POST arregla estos problemas, siendo el preferido de los desarrolladores.
Este método es tan sencillo como cambiar en el formulario el
método de envío de datos:
<p>Introduzca sus datos personales:</p>
<form name="formulario" method="POST" action="formulario2 .php" >
<table width="50%" border="0" cellspacing="0" cellpadding="0">
En cuanto a la recuperación de los datos, también debe cambiar el nombre
de la variable súper-global $_GET por $_POST de esta manera:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loóse.dtd">
<html>
<body>
<p>Datos introducidos:</p>
<?php
foreach ($_POST as $indice => $valor) {
echo "$indice: $valor<br>" ;
}
echo "<br>GUSTOS:<br>" ;
$gustos = $_POST["gustos"];
foreach ($gustos as $indice => $valor) {
echo "$indice: $valor<br>" ;
}
?>
</body>
</html>
Variables súper-globales
Desde PHP 4 se vienen utilizando los arrays súper-globales para almacenar
los valores que pasan de unas páginas a otras, se almacenan en el ordenador
del usuario o en el servidor. En PHP 5 el uso de estas variables se
hace obligatorio para recuperar todos los valores. Las variables a utilizar
son:
• $_GET: Almacena las variables que se pasan desde un formulario mediante
el método GET.
• $_POST: Almacena las variables pasadas por POST.
• $_COOKIE: Guarda los valores que están almacenados en cookies. Ya
veremos en capítulos sucesivos cómo utilizarlo.
• $_SESSlON •. Guarda las variables que se pasan entre sesiones.
• $_SERVER: Contiene numerosos valores relativos al servidor.
• $_FILES : Los archivos que enviemos a través de un formulario serán
recogidos en este array.
Una equivocación en el nombre de una variable puede llevarle a dar vueltas
sobre el código hasta encontrar el error. Por eso, es necesario conocer
el contenido de las variables súper-globales, así podrá averiguar si está
pasando los datos correctamente. La función siguiente se puede utilizar
cada vez que le surja un error de este tipo. La función muestra todos los
valores de los arrays súper-globales:
<?php
function depuración() {
echo "--Variables GET--<br>";
foreach ($_GET as $indice => $valor) {
echo "$indice: $valor<br>";
}
echo "--Variables POST--<br>";
foreach ($_POST as $indice => $valor) {
echo "$indice: $valor<:br>" ;
}
echo "--Variables COOKIES--<br>" ;
foreach ($_COOKIE as $indice => $valor) {
echo "$índíce: $valor<br>";
}
echo "--Variables SESSION--<br>";
foreach ($_SESSION as $indice => $valor) {
echo "$índíce: $valor<br>";
}
echo "--Variables SERVER-~<br>";
foreach ($_SERVER as $indice => $valor) {
echo "$indice: $valor<br>";
}
}
depuración () ;
?>
Resumen
Hasta ahora, sólo habíamos tenido la oportunidad de crear programas en
PHP que realizaran tareas en una única página Web.
Este capítulo ha dado una visión práctica de cómo utilizar los conceptos
aprendidos para escribir programas distribuidos en varias páginas. Aunque no ha aprendido ninguna función nueva, ha descubierto el verdadero
secreto del diseño de una Web dinámica, el paso de variables.
Si viene de otras versiones de PHP, tendrá que tener en cuenta que la forma
de recuperar las variables es, a partir de la versión 4.3, a través de las
variables súper-globales. |