Portada | Monotemáticos | Secciones | Desarrolladores | Comunidad | Servicios | Servicios profesionales | RSS
Desde 0 | HTML | CSS | ASP | PHP | AJAX | Javascript | Promoción de webs | Rentabilidad de webs
Directorio | Manuales | Scripts | FAQs | Programas | Artículos Copyleft | Actualidad | La Cosecha | Colabora
Registrarse | Vuestras páginas | Foros del web | Lista de correo | Boletín de novedades
Generador METAs | Compras | Busca cursos
Alojamiento | Dominios.es | Micropagos SMS | Buscadores | Patentes, marcas | Creación web | Multimedia | Videos
Desarrollo Freelance | Buscar proyectos | Buscar profesionales | Solicitar desarrollo

Pasar variables por la URL con PHP


Veremos cómo transferir variables de una página a otra por medio de la URL, en PHP.


01/1/70 - 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.

 Seguir navegando a partir aquí:
+ 1 manual relacionado
+ 1 categoria relacionada
+ 15 comentarios (Añadir)
+ 28 comentarios no revisados

 Autoría, licencia y acciones sobre este artículo

Informe de Rubén Alvarez*

Atención: Contenido exclusivo de DesarrolloWeb.com. No reproducir. Copyright.

* Para consultas técnicas utilizar la lista de correo.

Versión imprimible Versión imprimible del artículo
Enviar artículo por e-mail Enviar artículo por e-mail
Añadir un comentario al artículo Publicar un comentario del artículo

Manuales relacionados con este artículo
Dentro de Programación en PHP
Anterior: Operadores

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 15 comentarios revisados

 Comentario de Miguel Angel Alvarez
15/2/02 
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


 Comentario de Guillem Catala
08/7/02 
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.


 Comentario de Rubén
27/10/02 
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

 Comentario de José Muñoz Rojas
18/3/03 
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]

 Comentario de manuel
24/4/03 
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

 Comentario de David Martinez
16/9/03 
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

 Comentario de Juan
05/1/05 
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';

 Comentario de Ariel Jerez
30/1/05 
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.

 Comentario de Alberto
24/3/05 
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

 Comentario de David xgamanet
13/4/05 
a mi me funcionó tal y como dice Juan, concatenando, una solución simple pero efectiva... uso wamp5 1.4.3 saludos a todos.

 Comentario de Ruth
24/5/05 
¿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.


 Comentario de Ronin
03/6/05 
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

 Comentario de Jorge
08/2/06 
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

 Comentario de Axel
15/8/06 
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.

 Comentario de Miguel Angel Alvarez
13/1/07 
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.

Añadir un comentario al artículo Añadir un comentario del artículo
 Comentarios sin revisar
Entre los comentarios no revisados puede haber algunos interesantes que se hayan enviado recientemente.
 Se han encontrado 28 comentarios sin revisar

Ver el comentario no revisadoVer los comentarios no revisados
Añadir un comentario al artículo Añadir un comentario del artículo



Enlaces:
Maestrosdelweb
  Ir arriba

Manuales relacionados
+Programación en PHP
Categorías
+Manuales de PHP

Lectura recomendada

Compra este libro en Agapea, la librería urgente a domicilio.

Tienda DesarrolloWeb

DesarrolloWeb.com | Copyright | Anunciese | Acerca de | Datos legales | Contacta | Por GuiarteMultimedia