Diferencia entre revisiones de «PHP Paso de variables entre páxinas»

De MediaWiki
Ir a la navegación Ir a la búsqueda
Línea 24: Línea 24:
 
: Vexamos un exemplo de código:
 
: Vexamos un exemplo de código:
  
'''Arquivo: UD2_Ex1_eleccion_pelicula.php'''
+
'''Arquivo: UD2_paso_var_Ex1_eleccion_pelicula.php'''
 
::<syntaxhighlight lang="php" line enclose="div" highlight="11" >
 
::<syntaxhighlight lang="php" line enclose="div" highlight="11" >
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
Línea 36: Línea 36:
 
     <body>
 
     <body>
 
         <?php
 
         <?php
         printf("Mandamos un nome de película fixo na url:<a href='UD2_Ex1_datos_pelicula.php?pelicula=SUPERMAN'>PELICULA</a>");
+
         printf("Mandamos un nome de película fixo na url:<a href='UD2_paso_var_Ex1_datos_pelicula.php?pelicula=SUPERMAN'>PELICULA</a>");
 
         ?>
 
         ?>
 
     </body>
 
     </body>
Línea 43: Línea 43:
  
  
'''Arquivo: UD2_Ex1_datos_pelicula.php'''
+
'''Arquivo: UD2_paso_var_Ex1_datos_pelicula.php'''
 
::<syntaxhighlight lang="php" line enclose="div" highlight="12" >
 
::<syntaxhighlight lang="php" line enclose="div" highlight="12" >
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
Línea 76: Línea 76:
 
: Vexamos unha modificación do código anterior, pasando un nome de película con espazos:
 
: Vexamos unha modificación do código anterior, pasando un nome de película con espazos:
  
'''Arquivo: UD2_Ex1_eleccion_pelicula.php'''
+
'''Arquivo: UD2_paso_var_Ex1_eleccion_pelicula.php'''
 
::<syntaxhighlight lang="php" line enclose="div" highlight="11" >
 
::<syntaxhighlight lang="php" line enclose="div" highlight="11" >
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
Línea 90: Línea 90:
 
         $pelicula=urlencode("E.T. El extraterrestre");
 
         $pelicula=urlencode("E.T. El extraterrestre");
 
         echo "Mandamos un nome de película fixo na url:"
 
         echo "Mandamos un nome de película fixo na url:"
                 . "<a href='UD2_Ex1_datos_pelicula.php?pelicula=$pelicula'>PELICULA</a>";
+
                 . "<a href='UD2_paso_var_Ex1_datos_pelicula.php?pelicula=$pelicula'>PELICULA</a>";
 
         ?>
 
         ?>
 
     </body>
 
     </body>
Línea 97: Línea 97:
  
  
'''Arquivo: UD2_Ex1_datos_pelicula.php'''
+
'''Arquivo: UD2_paso_var_Ex1_datos_pelicula.php'''
 
::<syntaxhighlight lang="php" line enclose="div" highlight="12" >
 
::<syntaxhighlight lang="php" line enclose="div" highlight="12" >
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

Revisión del 18:18 25 sep 2016

A través da URL

  • 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: UD2_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='UD2_paso_var_Ex1_datos_pelicula.php?pelicula=SUPERMAN'>PELICULA</a>");
12         ?>
13     </body>
14 </html>


Arquivo: UD2_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: UD2_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='UD2_paso_var_Ex1_datos_pelicula.php?pelicula=$pelicula'>PELICULA</a>";
14         ?>
15     </body>
16 </html>


Arquivo: UD2_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>



  • 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 + esto + se lea + ben";
13         echo $cadeaCodificada;
14         echo urldecode($cadeaCodificada);
15         
16     ?>
17     </body>    
18 </html>
19 
20 
21 * <u>Nota:</u> Tamén é posible codificar a cadea utilizando a función [http://php.net/manual/es/function.rawurlencode.php rawurlencode]. 
22 : Neste caso utiliza unha codificación segundo o [http://www.faqs.org/rfcs/rfc3986.html estándar RFC3986]. Os espazo en branco son codificados con %20, por exemplo.

Utilizando sesións

  • Pódese empregar para pasar información 'importante' ou confidencial.
  • Para facer un pouco máis 'interesantes' os exemplos utilizando variables de sesións, imos mirar previamente a sección de formularios
  • Unha sesión 'dura' mentres un usuario está conectado a un sitio web.
  • Empeza cando se conecta por primeira vez.
  • Remata cando sae do sitio web ou leva un tempo de inactividade indicado pola directiva session.gc_maxlifetime no arquivo php.ini. Por defecto está establecido en 1440 segundos (24 minutos).
  • Dentro da sesión dun usuario é posible crear variables que manterán o seu valor mentres o usuario teña a sesión activa, e poderemos obter dito valores dende calquera páxina do sitio web.


  • Cada vez que se inicia unha sesión, se crea un identificador único (ID) o cal pode ser pasado dunha páxina a outra pola URL ou se se ten habilitados o uso de cookies.
  • Por motivos de seguridade se recomenda pasar o ID a través de cookies e non da URL.


  • Se se quere 'obrigar' ao usuario que utilice as cookies para pasar o ID se pode modificar o arquivo php.ini:
session.use_only_cookies = 1
Nota: Se estamos non aloxamento compartido, non teremos acceso ao arquivo php.ini, polo que poderemos crear un arquivo .htaccess no noso sitio web e engadir dita directiva ao mesmo.


  • Para iniciar ou reanudar unha sesión necesitamos chamar á función session_start(). É importante lembrar que debemos de chamar a dita función sempre que fagamos uso de variables de sesión. Dita chamada ten que facerse ao principio da páxina php e antes de enviar nada ao explorador.
  • Unha vez chamada podemos crear / utilizar as variables de sesión da forma: $_SESSION['variable'] = "valor";
  • Se queremos borrar os valores gardados nas variables de sesión, teremos que chamar á función session_reset() dentro dunha páxina coa sesión iniciada.


  • Vexamos un exemplo:






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