> Manuales > Manual de PHP

En este post aprendes a enviar variables desde una página a otra con PHP, usando la URL. Este mecanismo de envío de la variable conoce como GET.

Pasar variables por la URL con PHP

Hasta el momento en el Manual de PHP hemos aprendido muchos asuntos interesantes con el lenguaje de programación, como las estructuras de control para hacer bucles y condicionales. Seguro que ya te abrán abierto muchas posibilidades. Sin embargo, un sitio web está compuesto por diversas páginas y cada una de ellas contiene código que, en principio se ejecuta de manera independiente.

Muy a menudo necesitamos que nuestros distintos scripts, en cada archivo de PHP (o página) por separado, estén conectados unos con otros y que se sirvan de variables comunes. Por otro lado, el usuario interacciona por medio de formularios cuyos campos han de ser procesados para poder dar una respuesta. Todo este tipo de factores dinámicos han de ser eficazmente regulados por un lenguaje como PHP.

El objetivo final es conseguir que un conglomerado de páginas sueltas se comporte como una aplicación y en este sentido PHP ofrece diversos mecanismos muy útiles, que vamos a comenzar a abordar en éste y futuros artículos.

Pasar variables por URL

Es posible que ya os hayáis percatado de que las variables de un script tienen una validez exclusiva para el script y que nos resulta imposible conservar su valor cuando ejecutamos otro archivo distinto, aunque ambos estén en el mismo dominio y sus páginas estén vinculadas con enlaces HTML.

Existen varias formas de enviar las variables de una página a otra, de manera a que la página destino reconozca el valor asignado por el script de origen. En este artículo te vamos a explicar cómo enviar los datos por medio de la URL, lo que se conoce técnicamente como envío de datos por "GET".

Para pasar las variables de una página a otra lo podemos hacer introduciendo dicha variable dentro del enlace hipertexto de la página destino. La sintaxis sería la siguiente:

<a href="destino.php?variable1=valor1&variable2=valor2">Mi enlace</a>

Mediante el enlace anterior estaríamos enviando dos variables a la página de destino.php.

Podéis observar que estas variables no poseen el símbolo $ delante. Esto es debido a que en realidad este modo de pasar variables no es específico de PHP sino que es utilizado por el protocolo HTTP en general.

Ahora nuestra variable pertenece también al entorno de la página destino.php y está lista para su explotación.

Nota: No siempre se definen automáticamente las variables recibidas por parámetro 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.

He hecho, en las configuraciones predeterminadas de PHP, las variables enviadas mediante el mecanismo GET no estarán creadas automáticamente en la páigna de destino, sino que las tendremos que recibir explícitamente. Enseguida te enseñamos cómo lo harás.

En la página de destino tendrás que recibir las variables mediante un array superglobal llamado $_GET. Este es un array asociativo, cuyos índices serán el nombre de la variable que queremos recibir. Puedes ver más información sobre arrays en PHP y arrays asociativos.

Luego veremos otros ejemplos más detallados, pero para aclarar posibles dudas, veamos rápidamente un par de códigos. Tendremos pues dos páginas, origen.html (no es necesario darle extensión PHP puesto que no hay ningún tipo de código) y destino.php:

Página que envía los datos origen.html

<HTML>
<HEAD>
<TITLE>origen.html</TITLE>
</HEAD>
<BODY>
<a href="destino.php?saludo=hola&texto=Esto es una variable texto">Paso variables saludo y texto a la página destino.php</a>
</BODY>
</HTML>

Página que recibe los datos destino.php

<HTML>
<HEAD>
<TITLE>destino.php</TITLE>
</HEAD>
<BODY>

  Variable "saludo": <?php echo $_GET["saludo"]; ?> 
  <br>
  Variable "texto" <?php echo $_GET["texto"]; ?>
 
</BODY>
</HTML>

$HTTP_GET_VARS vs $_GET

A lo largo de las versiones de PHP ha ido cambiando la manera con la que se recibían las variables por la URL.

Al principio del todo las variables se encontraban declaradas en la página de destino de manera automática, lo que podría resultar más cómodo, pero daba lugar a posibles problemas de seguridad, ya que cualquier persona sería capaz de "falsear" variables en la página de destino, creando automáticamente nuevas variables con cualquier valor, solo por enviarlas en la URL.

Esta situación no era deseable y hacía que el lenguaje PHP fuera menos seguro, por dos razones: la primera que, si recibimos las variables siempre por $_GET nos aseguramos que esa varible viene realmente de la URL. La segunda es que así nuestro código será más claro cuando lo volvamos a leer, porque quedará especificado que esa variable estamos recibiéndola por la URL.

En versiones tempranas de PHP se usaba $HTTP_GET_VARS para recibir las variables por GET. Ahora el array donde se encuentran estas variables es $_GET. Este cambio permitió un código más conciso, más corto y de lectura más rápida. Pero en principio el array se usa exactamente igual.

echo "Este dato: " . $_GET["x"] . " lo recibo por URL.";

Fue a partir de la versión 4.1.0 de PHP cuando se introdujo el array asociativo $_GET, que contiene la misma información que $HTTP_GET_VARS, aunque $_GET es un array "superglobal".

El hecho de que $_GET sea superglobal quiere decir que lo puedes usar en cualquier parte de tu código, incluso dentro de funciones, sin necesidad de declarar que vas a usarlo con global $variable;.

Caracteres especiales en URL y su codificación con PHP

Hay algunos caracteres raros que no se pueden pasar, tal cual, por la URL. Por ejemplo, una URL no puede contener espacios en blanco, por lo que si intentas enviar una variable por URL con un valor que tiene un espacio en blanco, te dará problemas. Por ejemplo, el signo "*" no puede figurar tampoco en una URL. Así pues, tenemos que hacer algo para convetir esos caracteres, de modo que no den problemas en la URL.

La solución en PHP es sencilla, simplemente debemos codificar la variable que tiene caracteres conflictivos a formato URL. Para ello utilizamos la función urlenconde(), que viene en la librería de funciones de PHP. Podemos encontrar más información sobre esto en la FAQ: Problemas con variables pasadas en la URL en algunos caracteres.

Conclusión sobre el envío de variables por GET en PHP

Con esta información ya estás en disposición de enviar datos de una página a otra con PHP. Este es el primer mecanismo que queremos para poder compartir variables entre páginas y enviar señales entre los distintos scripts que componen un sitio web.

En el siguiente artículo aprenderás a enviar los datos por POST, para procesar variables que se envían por medio de formularios.

Referencia: Si lo deseas, puedes complementar esta información con unos explicativos videotutoriales sobre el paso de variables por GET en PHP.

Rubén Alvarez

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

Manual