PHP Paso de datos na URL

De MediaWiki
Saltar a: navegación, buscar
  • Unha forma de pasar información de unha páxina a outra é a través dunha URL.
Os datos que aparecen despois do signo '?' son parámetros:?q=php&ie=utf-8&oe=utf-8
O formato que teñen este tipo de parámetros é: param1=valor&param2=valor&.....
  • Desvantaxes:
  • Calquera persoa pode ver os valores das variables polo que dito método non é moi seguro.
  • O usuario pode cambiar o valor de ditas variables polo que pode suceder que o sitio amose ou faga algo diferente do permitido.
  • O usuario pode obter información non actual se usa unha URL con datos non actualizados.
  • O tamaño do que podemos enviar na URL está limitado (depende de cada navegador, pero pode estar entre 2KB-8KB)
  • Vantaxes:
  • A través da URL podemos pasar datos dunha páxina a outra sen necesidade de ter un formulario por medio (o veremos no exemplo seguinte).


  • As variables que se pasan desta forma poden ser referenciadas en PHP a través da matriz global $_GET['param'].
Vexamos un exemplo de código:

Arquivo: UD4_paso_var_Ex1_eleccion_pelicula.php

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2.     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3.  
  4. <html>
  5.     <head>
  6.         <meta charset="UTF-8">
  7.         <title></title>
  8.     </head>
  9.     <body>
  10.         <?php
  11.         printf("Mandamos un nome de película fixo na url:<a href='UD4_paso_var_Ex1_datos_pelicula.php?pelicula=SUPERMAN'>PELICULA</a>");
  12.         ?>
  13.     </body>
  14. </html>


Arquivo: UD4_paso_var_Ex1_datos_pelicula.php

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2.     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es">
  4.     <head>
  5.         <meta charset="utf-8" />
  6.         <title>Exemplos de códigos php</title>
  7.     </head>
  8.     <body>
  9.  
  10. <?php  
  11.  
  12.     printf("A película pasada como parámetro na URL é: <b>%s</b>",$_GET['pelicula']);
  13.  
  14.  
  15. ?>
  16.     </body>    
  17. </html>


  • Podedes comprobar como se modificades a url e poñedes outra valor, premendo a tecla 'enter' para que volva a cargar a páxina aparece o novo valor posto.

Pasando caracteres especiais na URL

  • O problema que podemos ter pasando valores desta forma, é que ditos valores teñan espazos en branco ou caracteres especiais.
  • Para poder pasar estes valores podemos facer uso da urlencode.
  • Para facer a función inversa: urldecode. Pero isto non é necesario no caso de asinar o valor a unha variable na segunda páxina.
Vexamos unha modificación do código anterior, pasando un nome de película con espazos:

Arquivo: UD4_paso_var_Ex1_eleccion_pelicula.php

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2.     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3.  
  4. <html>
  5.     <head>
  6.         <meta charset="UTF-8">
  7.         <title></title>
  8.     </head>
  9.     <body>
  10.         <?php
  11.         $pelicula=urlencode("E.T. El extraterrestre");
  12.         echo "Mandamos un nome de película fixo na url:"
  13.                 . "<a href='UD4_paso_var_Ex1_datos_pelicula.php?pelicula=$pelicula'>PELICULA</a>";
  14.         ?>
  15.     </body>
  16. </html>


Arquivo: UD4_paso_var_Ex1_datos_pelicula.php

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2.     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es">
  4.     <head>
  5.         <meta charset="utf-8" />
  6.         <title>Exemplos de códigos php</title>
  7.     </head>
  8.     <body>
  9.  
  10.     <?php  
  11.  
  12.         $pelicula=$_GET['pelicula'];
  13.         echo "A película pasada como parámetro na URL é: <b>$pelicula</b>";
  14.  
  15.     ?>
  16.     </body>    
  17. </html>


O resultado:
Como vemos cambiamos o carácter espazo en branco por un +.
  • O que visualiza o usuario na páxina: A película pasada como parámetro na URL é: E.T. El extraterrestre


  • Vexamos agora un exemplo de código de decodificación dunha cadea:
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2.     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es">
  4.     <head>
  5.         <meta charset="utf-8" />
  6.         <title>Exemplos de códigos php</title>
  7.     </head>
  8.     <body>
  9.  
  10.     <?php  
  11.  
  12.         $cadeaCodificada="<br/>Espero + que + isto + se lea + ben";
  13.         echo $cadeaCodificada;
  14.         echo urldecode($cadeaCodificada);
  15.        
  16.     ?>
  17.     </body>    
  18. </html>
Dará como resultado:
Espero + que + isto + se lea + ben
Espero que isto se lea ben Teño un teléfono


  • Nota: Tamén é posible codificar a cadea utilizando a función rawurlencode.
Neste caso utiliza unha codificación segundo o estándar RFC3986. Os espazo en branco son codificados con %20, por exemplo.


  • Un uso bastante habitual é de pasar datos relacionados con datos gardados nunha base de datos, no que queiramos obter información detallada sobre un produto.
Imaxinemos o caso de que temos gardada na base de datos os nosos produtos desta forma:
Código - Nome- Descrición - Resto de campos
 0 - Tomates - Tomates da horta. Ecolóxicos,.... - url da imaxe - resto de campos
 1 - Coliflor - Coliflor da horta. Ecolóxicos,.... - url da imaxe - resto de campos
  • Se fago unha consulta á base de datos pode recuperar a información do código e o nome e amosalo en forma de lista sendo cada elemento da lista un enlace a unha páxina no que amosarei o resto de campos:
<a href='detalleProduto.php?codigo=0'>Tomates</a>
<a href='detalleProduto.php?codigo=1'>Coliflor</a>
Como vemos, podemos enviar na URL o código do produto para así, cando o control chegue á páxina detalleProduto.php podemos obter có array global $_GET o código do produto e facer unha consulta á base de datos para obter a información do resto de campos do produto.





-- Ángel D. Fernández González -- (2016).