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

De MediaWiki
Ir a la navegación Ir a la búsqueda
(Página blanqueada)
 
Línea 1: Línea 1:
== A través da URL ==
 
  
* Unha forma de pasar información de unha páxina a outra é a través dunha [https://es.wikipedia.org/wiki/Localizador_de_recursos_uniforme URL].
 
 
* Se vos fixades cando facedes unha busca en google (por exemplo buscade 'php') na url aparecerá algo coma isto: https://www.google.es/search?q=php&ie=utf-8&oe=utf-8&client=firefox-b&gfe_rd=cr&ei=a1XgV4CmOu6s8wfuibOQAQ
 
: 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 [http://php.net/manual/es/reserved.variables.get.php $_GET['param']].
 
 
: Vexamos un exemplo de código:
 
 
'''Arquivo: UD2_paso_var_Ex1_eleccion_pelicula.php'''
 
::<syntaxhighlight lang="php" line enclose="div" highlight="11" >
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
 
<html>
 
    <head>
 
        <meta charset="UTF-8">
 
        <title></title>
 
    </head>
 
    <body>
 
        <?php
 
        printf("Mandamos un nome de película fixo na url:<a href='UD2_paso_var_Ex1_datos_pelicula.php?pelicula=SUPERMAN'>PELICULA</a>");
 
        ?>
 
    </body>
 
</html>
 
</syntaxhighlight>
 
 
 
'''Arquivo: UD2_paso_var_Ex1_datos_pelicula.php'''
 
::<syntaxhighlight lang="php" line enclose="div" highlight="12" >
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
<html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es">
 
    <head>
 
        <meta charset="utf-8" />
 
        <title>Exemplos de códigos php</title>
 
    </head>
 
    <body>
 
 
<?php 
 
 
    printf("A película pasada como parámetro na URL é: <b>%s</b>",$_GET['pelicula']);
 
 
 
?>
 
    </body>   
 
</html>
 
</syntaxhighlight>
 
 
 
* 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 [http://php.net/manual/es/function.urlencode.phpfunción urlencode].
 
 
* Para facer a función inversa: [http://php.net/manual/es/function.urldecode.php 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'''
 
::<syntaxhighlight lang="php" line enclose="div" highlight="11" >
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
 
<html>
 
    <head>
 
        <meta charset="UTF-8">
 
        <title></title>
 
    </head>
 
    <body>
 
        <?php
 
        $pelicula=urlencode("E.T. El extraterrestre");
 
        echo "Mandamos un nome de película fixo na url:"
 
                . "<a href='UD2_paso_var_Ex1_datos_pelicula.php?pelicula=$pelicula'>PELICULA</a>";
 
        ?>
 
    </body>
 
</html>
 
</syntaxhighlight>
 
 
 
'''Arquivo: UD2_paso_var_Ex1_datos_pelicula.php'''
 
::<syntaxhighlight lang="php" line enclose="div" highlight="12" >
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
<html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es">
 
    <head>
 
        <meta charset="utf-8" />
 
        <title>Exemplos de códigos php</title>
 
    </head>
 
    <body>
 
 
    <?php 
 
 
        $pelicula=$_GET['pelicula'];
 
        echo "A película pasada como parámetro na URL é: <b>$pelicula</b>";
 
 
    ?>
 
    </body>   
 
</html>
 
</syntaxhighlight>
 
 
 
 
 
* Vexamos agora un exemplo de código de decodificación dunha cadea:
 
::<syntaxhighlight lang="php" line enclose="div" highlight="12" >
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
<html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es">
 
    <head>
 
        <meta charset="utf-8" />
 
        <title>Exemplos de códigos php</title>
 
    </head>
 
    <body>
 
 
    <?php 
 
 
        $cadeaCodificada="<br/>Espero + que + esto + se lea + ben";
 
        echo $cadeaCodificada;
 
        echo urldecode($cadeaCodificada);
 
       
 
    ?>
 
    </body>   
 
</html>
 
 
</syntaxhighlight>
 
 
* <u>Nota:</u> Tamén é posible codificar a cadea utilizando a función [http://php.net/manual/es/function.rawurlencode.php rawurlencode].
 
: 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 ==
 
 
* <u>Pódese empregar para pasar información 'importante'</u> ou confidencial.
 
 
* Para facer un pouco máis 'interesantes' os exemplos utilizando variables de sesións, imos mirar previamente [http://wiki.cifprodolfoucha.es/index.php?title=PHP_Paso_de_datos_con_formularios 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 [http://php.net/manual/es/session.configuration.php#ini.session.gc-maxlifetime 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.
 
 
<br />
 
* 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 [https://es.wikipedia.org/wiki/Cookie_(inform%C3%A1tica) 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'''
 
 
: <u>Nota:</u> Se estamos non aloxamento compartido, non teremos acceso ao arquivo php.ini, polo que poderemos crear un [http://php.net/manual/es/configuration.changes.php arquivo .htaccess] no noso sitio web e engadir dita directiva ao mesmo.
 
 
 
* Para iniciar ou reanudar unha sesión necesitamos chamar á [http://php.net/manual/es/function.session-start.php función session_start()]. <b> É importante lembrar que <u>debemos de chamar</u> a dita función sempre que fagamos uso de variables de sesión</b>. Dita chamada ten que facerse <u>ao principio da páxina php e antes de enviar nada ao explorador</u>.
 
 
* Unha vez chamada podemos crear / utilizar as variables de sesión da forma: '''$_SESSION['variable'] = "valor";'''
 
 
* Se queremos <u>borrar</u> os valores gardados nas variables de sesión:
 
::* Podemos chamar á [http://php.net/manual/es/function.unset.php función unset($_SESSION['var']);] dentro dunha páxina coa sesión iniciada.
 
::: Por exemplo:
 
:::<syntaxhighlight lang="php" line enclose="div" highlight="" >
 
<?php
 
    unset($_SESSION['nome']);
 
    unset($_SESSION['id']);
 
?>
 
</syntaxhighlight>
 
::* Podemos chamar á [http://php.net/manual/es/function.session-destroy.php función session_destroy].
 
::: Por exemplo:
 
:::<syntaxhighlight lang="php" line enclose="div" highlight="" >
 
<?php
 
session_destroy();
 
?>
 
</syntaxhighlight>
 
 
 
 
* Vexamos un exemplo:
 
 
* Arquivo '''UD2_paso_var_Ex2_paxina1.php''':
 
::<syntaxhighlight lang="java" line enclose="div" highlight="" >
 
<?php
 
    session_start();
 
?>
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
 
<html>
 
    <head>
 
        <meta charset="UTF-8">
 
        <title></title>
 
    </head>
 
    <body>
 
<?php
 
    $_SESSION['nome']='angel';
 
 
?>
 
        <h1>Posto o valor da variable session 'nome' a Angel.</h1>
 
        <h2>Pulsa <a href='UD2_paso_var_Ex2_paxina2.php'> para ver o seu valor</a> noutra páxina...</h2>.
 
       
 
       
 
    </body>
 
</html>
 
</syntaxhighlight>
 
 
 
* Arquivo '''UD2_paso_var_Ex2_paxina2.php''':
 
::<syntaxhighlight lang="java" line enclose="div" highlight="" >
 
<?php
 
    session_start();
 
?>
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
 
<html>
 
    <head>
 
        <meta charset="UTF-8">
 
        <title></title>
 
    </head>
 
    <body>
 
<?php
 
    printf("<h1>O valor da variable sesión é: %s</h1>",$_SESSION['nome']);
 
    printf("<h2>O valor do ID de sesión é: %s</h2>",  session_id());
 
 
?>
 
    <h2>Pulsa <a href='UD2_paso_var_Ex2_paxina3.php'> para borrar o seu valor</a>...</h2>.
 
       
 
    </body>
 
</html>
 
</syntaxhighlight>
 
 
 
* Arquivo '''UD2_paso_var_Ex2_paxina3.php''':
 
::<syntaxhighlight lang="java" line enclose="div" highlight="" >
 
<?php
 
    session_start();
 
    unset($_SESSION['nome']);
 
    session_destroy();
 
 
?>
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
 
<html>
 
    <head>
 
        <meta charset="UTF-8">
 
        <title></title>
 
    </head>
 
    <body>
 
<?php
 
    printf("<h1>O valor da variable sesión é: %s</h1>",$_SESSION['nome']);
 
    printf("<h2>O valor do ID de sesión é: %s</h2>",  session_id());
 
 
?>
 
    <h2>Pulsa <a href='UD2_paso_var_Ex2_paxina1.php'> para volver a darlle un valor</a>...</h2>.
 
       
 
    </body>
 
</html>
 
</syntaxhighlight>
 
 
 
== Utilizando Cookies ==
 
 
* As [http://php.net/manual/es/features.cookies.php cookies] é información que se garda nos equipos dos usuarios dun sitio Web.
 
 
* O uso das cookies pode ser utilizada para gardar información sobre que 'páxinas' ou 'produtos' foron vistos por un usuario para, cando se volve ao mesmo sitio, que este poida ofrecer información 'personalizada'.
 
 
: Os seus detractores indican que pode ser un mecanismo para obter información sobre un usuario sen ser consciente do mesmo.
 
 
 
: Para eliminar o ID da sesión, se estamos a utilizar cookies deberemos chamar á [http://php.net/manual/es/function.setcookie.php función setCookie].
 
 
 
 
 
<br> -- [[Usuario:angelfg|Ángel D. Fernández González]] -- (2016).
 

Revisión actual del 08:42 10 oct 2016