dominios y alojamiento web en hostalia

Pasar variables por la URL con PHP

01 de enero de 2001
Valoración del artículo:
Veremos cómo transferir variables de una página a otra por medio de la URL, en PHP.
Atención: Contenido exclusivo de DesarrolloWeb.com. No reproducir. Copyright.
Bucles y condiciones son muy útiles para procesar los datos dentro de un mismo script. Sin embargo, en un sitio Internet, las páginas vistas y los scripts utilizados son numerosos. Muy a menudo necesitamos que nuestros distintos scripts 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.

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 enlazados. 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:

Pasar variables por URL

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>

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 otros lenguajes.

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. Ver comentarios del artículo al final de la página para más información.

Para aclarar posibles dudas, veamos esto en forma de ejemplo. 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:

<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>

<HTML>
<HEAD>
<TITLE>destino.php</TITLE>
</HEAD>
<BODY>
<?
echo "Variable $saludo: $saludo <br>n";
echo "Variable $texto: $texto <br>n"
?>
</BODY>
</HTML>

Ejecutar ejemplo

$HTTP_GET_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_GET_VARS, que es un array asociativo. Utilizándolo quedaría así:

<?
echo "Variable $saludo: $HTTP_GET_VARS["saludo"] <br>n";
echo "Variable $texto: $HTTP_GET_VARS["texto"] <br>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_GET_VARS por dos razones, la primera que así nos aseguramos que esa varible viene realmente de la URL 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 la URL.

$_GET

A partir de la versión 4.1.0 de PHP se ha introducido el array asociativo $_GET, que es idéntico a $HTTP_GET_VARS, aunque un poco más corto de escribir.

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.

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

Compartir en redes sociales

Comentarios
Fueron enviados 44 comentarios al artículo
10 comentarios no revisados
34 comentarios revisados:
Por: Miguel Angel Alvarez
15/2/2002
Es importante resaltar que no siempre se crean automáticamente las variables que llegan de un formulario o por la URL.

La creación automática o no depende de nuestra configuración del PHP, que se especifica en el archivo PHP.ini. Para este caso concreto se debe configurar la variable: track_vars boolean
Si está activada, la información de entrada de GET, POST y de las cookies se puede encontrar en las matrices asociativas $HTTP_GET_VARS,$HTTP_POST_VARS y $HTTP_COOKIE_VARS respectivamente

Por: Guillem Catala
08/7/2002
Algunos lectores habrán comprovado que puede funcionar sin usar la variable de sistema $HTTP_GET_VARS para cojer las variable que venían por la url... en efecto, si tienes php configurado para que no haga comentarios sobre todos los errores pasará por alto este caso de manera que no será necesario usar $HTTP_GET_VARS. El problema viene cuando tenemos configurado de forma que marque todos los errores... entonces recibiremos un error parecido a "La varible $var no está definida".

Los que no lo hayan comprovado lo pueden ver configurando php.ini y poner error_reporting= E_ALL; en el apartado de ERROR HANDLING.

Por: Rubén
27/10/2002
Un problema que surge actualmente debido al cambio de la configuracion por defecto de PHP en las versiones posteriores a 4.2.0 es la desactivacion en el archivo php.ini de la opcion register_globals.

Para poder usar los ejemplos tal y como son escritos en este articulo, esta opcion ha de estar activada (ON).

La desactivacion de esta opcion ha tenido lugar debido a que ella inducia a la creacion de scripts con fallos de seguridad. Podéis leer al respecto en:
http://www.php.net/manual/en/security.registerglobals.php
Por: José Muñoz Rojas
18/3/2003
El uso de la variable pasada por la URL con comillas dentro del array $HTTP_GET_VARS no funciona. Si les quitas las comillas va a funcionar. Ejemplo : $HTTP_GET_VARS[saludo]
Por: manuel
24/4/2003
Para que el ejemplo funcione con la variable del sistema $HTTP_GET_VARS hay que quitarle las dobles comillas a el nombre de la variable que va entre corchetes
Por: David Martinez
16/9/2003
aunque no se si este comentario sea para este articulo en especifico, anexo les envio una funcion que diseñe en javascript para lograr el mismo efecto del objeto Request de ASP pero entre paginas HTM o HTML es decir estaticas, para pasar variables entre dos paginas por la URL,

function obtvarurl(name_var){
name_var=new String(name_var)
var urlactual
var longurl, longvar, valorvar= new String()
var ctractual, longvaractual, varactual= new String()
urlactual= window.location
urlactual= new String(urlactual)
longurl=urlactual.length
longvar=name_var.length
for (i = 1; i < (longurl+1); i++)
{
    ctractual=urlactual.substring(i,i+1)
    if (ctractual=="?" || ctractual=="&")
       {
    varactual=urlactual.substring(i+1,i+longvar+1)
    if (varactual.toLocaleUpperCase() == name_var.toLocaleUpperCase())
       {
       longvaractual=urlactual.indexOf("&",i+longvar+2)
       if (longvaractual<0)
          {longvaractual=longurl}

       valorvar=urlactual.substring(i+longvar+2,longvaractual)

       }
    }
}
return valorvar
}


Saludos
david
Por: Juan
05/1/2005
Interesante el curso.
En el caso de este artículo el paso de variables por URL, no funcionó como está indicado en él. Pero si hago lo siguiente si funciona:

echo 'variable\$saludo: '.$HTTP_GET_VARS["saludo"].'<br>\n';
echo 'variable\$texto: '.$HTTP_GET_VARS["texto"].<br>\n';
Por: Ariel Jerez
30/1/2005
Para que los ejemplos funcionen tambien pueden probar con la siguiente funcion: extract($_GET);
Lo cual convertira a variables automaticamente todos los parametros que pasen url.
Por: Alberto
24/3/2005
Hola a todos!!!

Yo tenía el problema de pasar las variables de una página a otra, lo solucioné configurando REGISTER_GLOBALS=ON
Además, si utilizan formularios, el método debe ser GET, y el botón no debe llevar nombre (name), espero les seirva de algo.... Suerte
Por: David xgamanet
13/4/2005
a mi me funcionó tal y como dice Juan, concatenando, una solución simple pero efectiva... uso wamp5 1.4.3 saludos a todos.
Por: Ruth
24/5/2005
¿y si lo que quiero es pasar un Objeto?? ¿Puede hacerse de alguna forma?

RESPUESTA:

Entonces utiliza variables de sesión, que almacenan el objeto en el servidor y se asocia con el identificador de la sesión abierta por el visitante.

Las variables de sesión estarán disponibles durante toda la visita del usuario al sitio sin que las tengas que pasar de página a página.

Por: Ronin
03/6/2005
Si tienes que mantener variables durante varias páginas son más cómodas las variables de sesion, aparte de no necesitar añadir nada en las url para llamar a las páginas.
Por ejemplo para pasar http://libroscentra.com?variable=valor
Puede que ese valor no lo sepas y tengas que usar cosas del tipo http://libroscentra.com?variable=<?php echo $variable; ?> Bastante más engorroso que usar una varible de sesion
Por: Jorge
08/2/2006
Hola tengo un problema al pasar la variable por la url ya que solo me pasa la primera palabra justo hasta llegar al primer espacion en blanco y me gustaria saber si hay alguna forma de que te cogiera tambien los espacios en blanco
Por: rafaconpu
13/3/2006
Pasar variables por URL en algunos casos está bien, pero ¿Qué ocurre si la página que te abre contiene frames? Ya no podrás obtener las variables puesto que sale un error diciendo que no está definida la variable.
Por: aldoemilio
14/3/2006
Hoy empece con el PHP y me parece muy poderoso. Encontré un pequeño detalle en esta página que hace que el codigo, tal y como esta, no funcione: dentro de los brackets que definen que variable debemos usar se deben "escapar" las comillas y la barra inversa del newline. El codigo debe ser:
echo "Hola $_GET["nombre"]\n";
y no
echo "Hola $_GET["nombre"] ";
como aparece.
Por: Axel
15/8/2006
Este capítulo y el siguiente fueron mi segundo gran dolor de cabeza después de la instalación y configuración de PHP. Quisiera aportar algunas recomendaciones para no rendirse y morir en el intento.

Mi arquitectura WAMP (Windows, Apache, MySQL, PHP) es la siguiente:

WINDOWS XP
APACHE 2.2.2
MySQL 5.0
PHP 5.1.4

Si tu arquitectura es ésta y te funciona, te recomiendo lo siguiente:

1. No necesitas activar Register_Globals en php.ini (mantener en off).

2. Si deseas enviar una variable por URL y estás trabajando tu WEB en localhost debes indicar, en el archivo de origen, la ruta de envío de la siguiente manera:
<a href="http://localhost/Webeando/webeando.php?nombre=Axel&apellidos=Pavez Vidal">Enviar a Webeando</a>

Nota: en mi caso tengo el archivo de destino (Webeando.php) en la carpeta 'Webeando' que está dentro de 'htdocs' en Apache. Como ves, indico toda la ruta.

3. En el archivo de destino debes recoger la variable usando $_GET con la siguiente sintaxis según sea el caso:

A. Si deseas recibir únicamente la variable para procesarla según tus nececidades, hazlo como sigue:

echo $_GET["nombre"]."<br>";
echo $_GET["apellidos"]."<br>";

B. Si lo que deseas es que tu variable aparezca embebida dentro de un texto la sintaxis es esta:

echo "Mi nombre es: $_GET[nombre]<br>";
echo "Mis apellidos son: $_GET[apellidos]<br>";

Nota 1: La diferencia está en la posición de las comillas dobles: Prestar mucha atención en ésto.

Nota 2: GET siempre, siempre, siempre debe ir con mayúscula para que sea reconocida la variable

Nota 3: La sintaxis antigua $HTTP_GET_VARS no funciona en esta versión de PHP (al menos no a mí). Recomiendo usar $_GET.
Por: Miguel Angel Alvarez
13/1/2007
Para todos los que tienen problemas al pasar caracteres raros por la URL, como los espacios en blanco, recomiendo la lectura de la FAQ: paso de variables URL con caracteres raros como espacios.
Por: TioLucas
21/4/2007
Esto va para aquellos que desean saber cómo se pasa una variable a una URL. A mi me funcionó así:

<?
echo "<a href=nueva_pagina.php?variable_nueva=".$variable_actual.">Link</a>";
?>

Y para aquellos que desean pasar un array como parámetro, me funcionó esto:

<?

// '$array' es el nombre del array que deseamos pasar
// '$parametro_url' es un string que armaremos para pasar los valores del array como parámetros
// para cada elemento '$array[x]' agregamos una cadena 'array_url[x]=valor&'
// a la variable '$parametro_url'

$parametro_url="";
foreach($array as $valor){
$parametro_url=$parametro_url."array_url[".array_search($valor, $array)."]=".$valor."&";
}


// Si '$parametro_url' no es vacío
// le agregamos el '?' al comienzo y le quitamos el último '&'

if($parametro_url!=""){
$parametro_url="?".substr($parametro_url,0,-1);
}


// Ahora pasamos el contenido del string '$parametro_url' como
// los valores del array '$array_url' a la página que abriremos

echo "<a href=nueva_pagina.php".$parametro_url.">Link</a>";
?>

OJO! Sólo funciona para arrays pequeños (en mi caso menores a 348 elementos), no funciona pasar el array como variable directamente.
Creo que es una solución poco eficiente pero eficaz para pequeños arreglos.
OJO_2! Es mi tercer día con PHP...por favor si los más experimentados pueden, revisen esto que mandé y corríjanlo si corresponde.

Creo que lo mio con PHP es amor a primera vista, espero no defraudarme.
Por: Eduardoartemis
22/6/2007
La cantidad máxima de variables pasadas via url no debe ser mayor a 100 :( ya me paso por eso se los digo :( que hacer ante ese caso:(
pregunta sobre variables
Por: Lu
20/1/2010
hola, quisiera saber si es posible pasar una variable de un formulario que esta por ejemplo en www.mipagina1.com a una pagina que esta en www.mipagina2.com

WeAreTh...
post php
25/2/2010
porque no puedo pasar variables con el metodo post en php ' y si es asi entonces porque esta el $_post ????

gracias
Pasar variables de una pagina a otra
25/2/2010
He hecho el ejemplo que poneis en la página y no funciona, con el echo las variables no se imprimen.
Tampoco os funciona a vosotros en vuestro ejemplo.

Si me pudieraia aclarar eso os lo agradecería.

Saludos

Manuel Flores
cual es mi falla por favor diganme
Por: luis
17/4/2010
echo '<a href="fres.php?dni='.$row['dni'].'">link</a>'
excelente aporte
Por: osiris
02/6/2010
excelente aporte, ya saben si quieren enviar por get es asi...

archivo: archivo1.php

<a href="archivo2.php?id=misdatos">enviar datos</a>

_____________________________________________________________

y en donde tomaremos los datos de la url...

archivo: archivo2.php?id=
seria entonces
$id = $HTTP_GET_VARS["id"];


y listo

roberto...
Muy buena la solucion de AXEL
04/6/2010
Gracias gente a mi me ha funcionado de maravillas, sin tener que tocar la variable registrer
Saludos
Primer Ejemplo
Por: spanisher
23/6/2010
Hola, el primer ejemplo no recoge los parametros que recibe de GET, así que no muestra nada.

Felicidades por la web, siempre la consulto, haceis un trabajo increible.
Ayudaaa
Por: karinaduarte
02/7/2010
como hago para pasar una variable si a la pag que la paso lo redirecciono a otra?

Tengo un formulario que envia un "nombre" a una pag php. si el nombre esta en blanco o no coincide con la base de datos pongo a que mande "error" sino lo reenvio a una pag donde mostrara todos los datos de ese "nombre".
use:
header("location: mostrardatos.php");
pero al reenviar a esa pag "mostrar" no toma el valor "nombre" como hago que lo tome? porfa ayudenme este es mi correo karinaduarte17@yahoo.com
gracias
Por: mauricio restrepo
24/7/2010
Gracias funciona perfectamente! yo lo hize enviando una variable ya almacenada del formulario! asi:

="regaprendiz.php?id=<?php echo $id; ?>

y luego recibo los datos en el otro formulario

<?php echo $_GET["id"] ?>

Aunque es preferible usar las variables de sesión!
así me funciona a mí....
Por: Gonzalo Alonso Guerrero
22/9/2010
origen.html:
<html lang="en">
<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 pagina destino.php</a>
<!--<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>


destino.php:
<html lang="en">
<head>
<title>destino.php</title>
</head>
<body>
<?PHP
echo 'variable saludo:'.$_GET["saludo"].'<br>';
//echo 'variable texto: $_GET["texto"]<br>';
?>
</body>
</html>

Jhorman...
Me ha funcionado como Axel ha dicho.
17/12/2010
Me ha funcionado como Axel ha dicho. Gracias.
Sobre validación de código
14/1/2011
Por qué el sitio http://validator.w3.org/ no valida como correcto la asignación de las dos variables en la misma línea?

ray_fel...
funciona
30/7/2011
funciona como dice Gonzalo Alonso Guerrero. gracias

yandelf...
otra solucion!
01/9/2011
pos bueno y o lo unico q hice fue definir la variables con anterioridad, es decir, en el ejemplo anterion coloque el siguiente codigo en la pagina destino.
<html>
<HEAD>
<title>destino2.php</title>
</head>
<body>
<?php
$saludo . $_GET["saludo"];
$texto . $_GET["texto"];
echo $saludo.$texto;
?>

manigor...
como hacer link a otra pagina desde un campo especifico
14/11/2011
Saludos a todos, estoy haciendo mis primeras armas con php y estoy desarrollando una aplicación pero he llegado a un punto donde no sè que hacer, tal vez es una tonteria pero no logro que funcione.

Tengo una tabla donde muestro los registros de acuerdo a una consulta en mysql, una de las columnas de dicha tabla de salida que muestro en pantalla tiene la información de la fecha en que se ejecuta una tarea, la idea es que el usuario de click sobre dicha fecha para que actualice la misma, en primera instancia va a aparecer como 0000-00-00 pues aún no se ha ejecutado pero la idea es que aparezca resaltado como un link de acceso a una pagina web y que el usuario de click sobre la fecha y lo mande a otra pagina donde escoja la fecha en la cual se ejecutó una tarea, lo que no sé si utilizo un href dentro de un echo para hacer esto, ahora que muestro solo el campo con los registros uso esta instruccion.

<td>Fecha ejecutado</td>

Aqui se define el nombre de la columna

<td><?php echo $row_act_con['Fecha']; ?></td>

Aqui despliego en esa columna el contenido de un arreglo, el campo Fecha, es aqui donde quiero que aparezca resaltada la fecha y poder actualizarla en otra pàgina, gracias de antemano por su ayuda

Manuales relacionados
Categorias relacionadas
El autor
Rubén Alvarez
Redactor de DesarrolloWeb.com
http://www.desarrolloweb.com
Lectura recomendada
Últimas noticias
Donaciones
Si piensas que te hemos ayudado y merecemos tu apoyo económico...