PHP EXERCICIOS SESSION

De MediaWiki
Ir a la navegación Ir a la búsqueda

Exercicio 1

  • Crea unha páxina de nome 'UD4_session_Ex1_paxina1.php' no que se amosará o valor do identificar de sesión e o valor dunha variable de sesión de nome 'nome'. En caso de non ter valor asinado, amosará a cadea 'Non ten valor'.
Esta páxina terá dous enlaces:
  • Un enlace á páxina 'UD4_session_Ex0_darValor.???': Esta páxina asinará o valor 'O teu nome' á variable de sesión 'nome' e cargará a páxina 'UD4_session_Ex1_paxina1.php'
  • Un enlace á páxina 'UD4_session_Ex0_borrarValor.???': Esta páxina eliminará a variable de sesión e o id e cargará a páxina 'UD4_session_Ex1_paxina1.php'.

Solución Exercicio 1

Páxina: UD4_session_Ex1_paxina1.php (necesita ter extensión php xa que empregamos as variables de sesión. Podería darse o caso de que a páxina soamente tivera o formulario, polo que podería ter extensión html).

 1 <?php
 2     session_start();
 3     
 4 ?>
 5 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 6     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 7 
 8 <html>
 9     <head>
10         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
11         <title></title>
12     </head>
13     <body>
14         <p>
15             O valor da variable de sesión é: 
16             <?php
17                 if (!empty($_SESSION['nome'])){
18                     echo $_SESSION['nome'];
19                 }
20                 else {
21                     echo "Non ten valor...";
22                 }
23                     
24             ?>
25             
26         </p>
27         <p>
28             O valor do id de sesión é:<?php echo session_id() ?>
29         </p>
30         
31         <h2>Pulsa <a href='UD4_session_Ex1_darValor.php'> para dar un valor á variable de sesión</a></h2>
32         <h2>Pulsa <a href='UD4_session_Ex1_borrarValor.php'> para borrar a variable de sesión e pechar sesión</a></h2>
33         
34     </body>
35 </html>

Páxina: UD4_session_Ex1_darValor.php

1 <?php
2 
3 session_start();
4 
5 $_SESSION['nome']='ANGEL';
6 
7 header('Location: UD4_session_Ex1_paxina1.php');
8 
9 // Fixarse que esta páxina non leva código HTML polo que non pechamos o código PHP


Páxina: UD4_session_Ex1_borrarValor.php

 1 <?php
 2 
 3 session_start();
 4 
 5 session_unset();
 6 session_destroy();
 7 setcookie(session_name(),'',0,'/');
 8 
 9 header('Location: UD4_session_Ex1_paxina1.php');
10 
11 // Fixarse que esta páxina non leva código HTML polo que non pechamos o código PHP

Exercicio 1B

Modifica o exercicio anterior e fai que a páxina 'UD4_session_Ex1_paxina1.php' teña un formulario para introducir un nome, cunha lonxitude máxima de 40 caracteres. O valor introducido debe ser gardado no variable de sesión na mesma páxina que no exercicio anterior. Na páxina 'UD4_session_Ex1_darValor.???' comprobará se o nome ten caracteres non permitidos ou ten unha lonxitude maior ao indicado na propiedade maxlength no formulario. Nese caso cargará a páxina inicial sen asinar o valor á variable de sesión.



Solución Exercicio 1B

Páxina: UD4_session_Ex1B_paxina1.php (necesario php xa que vai facer uso da variable de sessión que garda o error)

 1 <?php
 2     session_start();
 3     
 4 ?>
 5 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 6     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 7 
 8 <html>
 9     <head>
10         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
11         <title></title>
12     </head>
13     <body>
14         <form action="UD4_session_Ex1B_darValor.php" method="post">
15             <div>
16                 Nome:<input type="text" size="40" maxlength="40" name="txtNome" />
17             </div>                
18             <div>
19                 <input type="submit" name="btnDarValor" value="Enviar" />
20             </div>
21             
22             
23         </form>
24         <p>
25             O valor da variable de sesión é: 
26             <?php
27                 if (!empty($_SESSION['nome'])){
28                     echo $_SESSION['nome'];
29                 }
30                 else {
31                     echo "Non ten valor...";
32                 }
33                     
34             ?>
35             
36         </p>
37         <p>
38             O valor do id de sesión é:<?php echo session_id() ?>
39         </p>
40         
41         <h2>Pulsa <a href='UD4_session_Ex1B_darValor.php'> para dar un valor á variable de sesión</a></h2>
42         <h2>Pulsa <a href='UD4_session_Ex1B_borrarValor.php'> para borrar a variable de sesión e pechar sesión</a></h2>
43         
44     </body>
45 </html>



Páxina: UD4_session_Ex1B_darValorphp

 1 <?php
 2 
 3 // Comprobamos se recibimos datos do formulario. Poderíamos preguntar por 'btnDarValor' para asegurarnos que vimos do formulario anterior
 4 // Non facemos else xa que nos dous casos (tanto se ven datos do formulario como se intentamos cargar esta páxina directamente) cargamos a páxina inicial
 5 if (!empty($_POST) && !empty($_POST['txtNome'])){
 6     session_start();
 7     
 8     // ELimnamos caracteres non permitidos
 9     $nome=filter_var($_POST['txtNome'],FILTER_SANITIZE_FULL_SPECIAL_CHARS, FILTER_FLAG_NO_ENCODE_QUOTES);
10     if (($nome!=$_POST['txtNome']) || strlen($nome)>40) { // Tiña caracteres non permitidos
11         header('Location: UD4_session_Ex1B_paxina1.php');
12         exit;
13     }
14     $_SESSION['nome']=$nome;
15     
16 }
17 
18 header('Location: UD4_session_Ex1B_paxina1.php');
19 
20 // Fixarse que esta páxina non leva código HTML polo que non pechamos o código PHP

</syntaxhighlight>


Páxina: UD4_session_Ex1B_borrarValor.php

 1 <?php
 2 
 3 session_start();
 4 
 5 session_unset();
 6 session_destroy();
 7 setcookie(session_name(),'',0,'/');
 8 
 9 header('Location: UD4_session_Ex1B_paxina1.php');
10 
11 // Fixarse que esta páxina non leva código HTML polo que non pechamos o código PHP

Exercicio 2

  • Crea unha páxina de nome 'UD4_session_Ex2_paxina1.???' que amosa un formulario no que se pida un login e password. O login non pode ter máis de 40 caracteres e o password non máis de 20 caracteres.
Tamén amosará un enlace a unha páxina de nome: UD4_session_Ex2_paxina_secreta.php.
O action do formulario 'apuntará' á páxina: UD4_session_Ex2_validar
Tamén debe amosar os erros que se poidan dar na páxina de validación.
  • Páxina 'UD4_session_Ex2_validar.???': Dita páxina comprobará que veñen datos do formulario anterior, comprobará que non teñan caracteres extraños e tamén a lonxitude de datos. En caso de non cumprir algunha das condicións amosará a páxina inicial.
Definiremos en dita páxina un array multidimensional de nome $usuarios no que estean gardados dous usuarios cos seguintes datos: 'nome'=>'pepe', 'password'=>'123' ; 'nome'=>'juan', 'password'=>'456'
Comprobará se o login e password enviado no formulario coincide co login/password de cada un dos elementos do array (soamente fai falla facer un foreach).
En caso de que coincida se gardará nunha variable de sesión o nome e noutra un valor que permita acceder as seguintes páxinas (son páxinas que se necesita estar validado para acceder).
Cargará a páxina: 'UD4_session_Ex2_paxina_secreta.???'
En caso de non superar a validación (user-password baleiros, número máximo de caracteres alcanzado ou usuario-password inexistente) deberá informar á páxina inicial (emprega unha variable de sesión)
  • Páxina 'UD4_session_Ex2_paxina_secreta.???': Soamente se poderá acceder a esta páxina se se está validado. En caso contrario cargarase a páxina inicial.
Amosar o nome do usuario e un enlace á páxina 'UD4_session_Ex2_pechar_sesion.???'.
  • Páxina 'UD4_session_Ex2_pechar_sesion.???': Soamente se poderá acceder a esta páxina se se está validado. Borrará as variables de sesión gardadas, o id de sesión e cargará a páxina inicial.



Solución Exercicio 2

Páxina: 'UD4_session_Ex2_paxina1.php

 1 <?php
 2     session_start();
 3 ?>    
 4 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 5     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 6 
 7 <html>
 8     <head>
 9         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
10         <title></title>
11     </head>
12     <body>
13         <form action="UD4_session_Ex2_validar.php" method="post">
14             <div>
15                 Nome:<input type="text" size="40" maxlength="40" name="txtNome" />
16             </div>                
17             <div>
18                 Password:<input type="password" size="20" maxlength="20" name="txtPassword" />
19             </div>                
20             <div>
21                 <input type="submit" name="btnValidar" value="Enviar" />
22             </div>
23         </form>
24 
25         <h2>Pulsa <a href='UD4_session_Ex2_paxina_secreta.php'> para intentar acceder á páxina secreta sen estar validado</a></h2>
26         
27 
28         <?php 
29             if(isset($_SESSION['error'])) {
30                 echo "<div class='mt-3 text-danger font-weight-bold text-lg'>";
31                 echo $_SESSION['error'];
32                 unset($_SESSION['error']);
33                 echo "</div>";
34             }
35         ?>    
36         
37 
38     </body>
39 </html>


Páxina: UD4_session_Ex2_validar.php

 1 <?php
 2 
 3 session_start();
 4 
 5 // Temos nun array os nomes e passwords dos usuarios que teñen acceso
 6 $usuarios=[['nome'=>'pepe','password'=>'123'],['nome'=>'juan','password'=>'456']];
 7 // Poderíamos facelo por partes se non o ves claro:
 8 //  $usuario1=['nome'=>'pepe','password'=>'123']
 9 //  $usuario2=['nome'=>'juan','password'=>'456']
10 //  $usuarios[]=$usuario1;  $usuarios[]=$usuario2; 
11 
12 // Comprobamos se recibimos datos do formulario. Poderíamos preguntar por 'btnDarValor' para asegurarnos que vimos do formulario anterior
13 // Non facemos else xa que nos dous casos (tanto se ven datos do formulario como se intentamos cargar esta páxina directamente) cargamos a páxina inicial
14 if (!empty($_POST['btnValidar']) && !empty($_POST['txtNome']) && !empty($_POST['txtPassword'])){
15     // ELimnamos caracteres non permitidos e comprobamos se cumplen as condicións
16     $nome=filter_var($_POST['txtNome'],FILTER_SANITIZE_STRING);   
17     $password=filter_var($_POST['txtPassword'],FILTER_SANITIZE_STRING);   
18     if (($nome!=$_POST['txtNome']) || strlen($nome)>40 ||
19         ($password!=$_POST['txtPassword']) || strlen($password)>20   ) { // Tiña caracteres non permitidos
20         $error = "O login  ou o password son incorrectos.";       
21     }
22     else{
23             // Comprobamos se o login-password coincide con algún dos do array
24         foreach($usuarios as $usuario){ // Dentro do bucle,$usuario é cada usuario=> un array asociativo
25             if (($usuario['nome']==$nome) && $usuario['password']==$password){
26                 $_SESSION['validado']=1;
27                 $_SESSION['nome']=$nome;
28             }
29         }
30         if(!isset($_SESSION['validado'])){
31             $error = "Non existe ese usuario-password.";
32         }
33     }
34 }
35 else{
36     $error = "O usuario ou password veñen baleiros";
37 }
38 if(!isset($error)){
39     header('Location: UD4_session_Ex2_paxina_secreta.php');
40 }
41 else{
42     $_SESSION['error'] = $error;
43     header('Location: UD4_session_Ex2_paxina1.php');
44 }


Páxina: UD4_session_Ex2_paxina_secreta.php

 1 <?php
 2     session_start();
 3     
 4     // Se non está validado o mandamos á páxina inicial
 5     if ($_SESSION['validado']==0){
 6         $_SESSION['error'] = "Non estás validado.";
 7 
 8          header('Location: UD4_session_Ex2_paxina1.php');
 9          exit();    // Se non seguiría executando o script
10     }
11     
12 ?>
13 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
14     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
15 
16 <html>
17     <head>
18         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
19         <title>Páxina para usuarios rexistrados</title>
20     </head>
21     <body>
22         <p>
23             BENVIDO <?php echo $_SESSION['nome']; ?>
24         </p>
25         <p>
26             Soamente os usuarios rexistrados poden ver esta páxina...
27         </p>
28         
29         <h2>Pulsa <a href='UD4_session_Ex2_pechar_sesion.php'> para pechar a sesión</a></h2>
30         
31         
32     </body>
33 </html>


Páxina: UD4_session_Ex2_pechar_sesion.php

 1 <?php
 2 session_start();
 3 
 4 // Se non está validado o mandamos á páxina inicial
 5 if ($_SESSION['validado']==0){
 6      header('Location: UD4_session_Ex2_paxina1.php');
 7      exit();    // Se non seguiría executando o script
 8 }
 9 
10 
11 session_unset();
12 session_destroy();
13 setcookie(session_name(),'',0,'/');
14 
15 header('Location: UD4_session_Ex2_paxina1.php');
16 
17 // Fixarse que esta páxina non leva código HTML polo que non pechamos o código PHP

Exercicio 3

  • Modifica o exercicio anterior para que en caso de non validarse, dende a páxina UD4_session_Ex2_validar.php, envíe á páxina inical os datos do formulario e unha mensaxe indicando se a validación non foi correcto por introducir un login ou por introducir un password incorrecto. Que se amose na páxina inicial o login/password posto anteriormente.


Solución Exercicio 3

Páxina: 'UD4_session_Ex3_paxina1.php

 1 <?php
 2     session_start();
 3     
 4     $login='';
 5     $password='';
 6     if (!empty($_SESSION['datos'])){
 7         $login=$_SESSION['datos']['txtNome'];
 8         $password=$_SESSION['datos']['txtPassword'];
 9     }
10 ?>
11 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
12     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
13 
14 <html>
15     <head>
16         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
17         <title></title>
18     </head>
19     <body>
20         <form action="UD4_session_Ex3_validar.php" method="post">
21             <div>
22                 Nome:<input type="text" size="40" maxlength="40" name="txtNome" value='<?php echo $login ?>' />
23             </div>                
24             <div>
25                 Password:<input type="password" size="20" maxlength="20" name="txtPassword" value='<?php echo $password ?>'  />
26             </div>                
27             <div>
28                 <input type="submit" name="btnValidar" value="Enviar" />
29             </div>
30             
31             
32         </form>
33 
34         <h2>Pulsa <a href='UD4_session_Ex2_paxina_secreta.php'> para intentar acceder á páxina secreta sen estar validado</a></h2>
35 
36         <?php
37             if (!empty($_SESSION['error'])){
38                 printf("<h2>%s</h2>",$_SESSION['error']);
39             }
40         ?>
41         
42     </body>
43 </html>


Páxina: 'UD4_session_Ex3_validar.php

 1 <?php
 2 
 3 // Temos nun array os nomes e passwords dos usuarios que teñen acceso
 4 $usuarios=[['nome'=>'pepe','password'=>'123'],['nome'=>'juan','password'=>'456']];
 5 // Poderíamos facelo por partes se non o ves claro:
 6 //  $usuario1=['nome'=>'pepe','password'=>'123']
 7 //  $usuario2=['nome'=>'juan','password'=>'456']
 8 //  $usuarios[]=$usuario1;  $usuarios[]=$usuario2; 
 9 
10 // Comprobamos se recibimos datos do formulario. Poderíamos preguntar por 'btnDarValor' para asegurarnos que vimos do formulario anterior
11 // Non facemos else xa que nos dous casos (tanto se ven datos do formulario como se intentamos cargar esta páxina directamente) cargamos a páxina inicial
12 if (!empty($_POST) && !empty($_POST['txtNome']) && !empty($_POST['txtPassword'])){
13     session_start();
14     
15     // ELimnamos caracteres non permitidos e comprobamos se cumplen as condicións
16     $nome=filter_var($_POST['txtNome'],FILTER_SANITIZE_STRING);   
17     $password=filter_var($_POST['txtPassword'],FILTER_SANITIZE_STRING);   
18     if (($nome!=$_POST['txtNome']) || strlen($nome)>40){
19        $_SESSION['error'] = 'O nome non é correcto';
20        $_SESSION['datos'] = $_POST;
21        header('Location: UD4_session_Ex3_paxina1.php');
22        exit();
23     }
24     if($password!=$_POST['txtPassword'] || strlen($password)>20) { 
25        $_SESSION['error'] = 'O password non é correcto';
26        $_SESSION['datos'] = $_POST;
27        header('Location: UD4_session_Ex3_paxina1.php');
28        exit();
29     }
30     // Comprobamos se o login-password coincide con algún dos do array
31     foreach($usuarios as $usuario){ // Dentro do bucle,$usuario é cada usuario=> un array asociativo
32         if ($usuario['nome']==$nome) {
33            if($usuario['password']==$password){
34                 $_SESSION['validado']=1;
35                 $_SESSION['nome']=$nome;
36                 // Borramos os posibles erros de validacións anteriores
37                 unset($_SESSION['error']);
38                 unset($_SESSION['datos']);
39                 header('Location: UD4_session_Ex2_paxina_secreta.php');
40                 exit();
41            }
42            else{    // O login coincide pero non o password
43                 $_SESSION['error'] = 'O password non é correcto';
44                 $_SESSION['datos'] = $_POST;
45                 header('Location: UD4_session_Ex3_paxina1.php');
46                 exit();
47            }
48             
49         }
50     }
51     // Se chega ata aquí quere dicir que non coincide o login
52     $_SESSION['error'] = 'O nome non é correcto';
53     $_SESSION['datos'] = $_POST;
54     header('Location: UD4_session_Ex3_paxina1.php');
55     
56     
57 }
58 else {
59     header('Location: UD4_session_Ex3_paxina1.php');
60 }



Exercicio 4

  • Crea unha páxina de nome UD4_session_Ex4_preferencias.??? na que se amose unha páxina no que o usuario ten que escoller a cor de fondo e a cor dos textos (cunha lista) que van ter as páxinas do seu sitio web.
  • Unha vez escollidos, ao premer nun botón co texto 'Gardar' pasará á seguinte páxina de nome UD4_session_Ex4_pref_paxina1.??? no que se gardarán en variables de sesión as opcións escollidas e amosará un texto calquera no que se visualizará coa cor de fondo e de texto escollido. Dita páxina terá a maiores un enlace á páxina UD4_session_Ex4_pref_paxina2.???. A esta páxina podemos volver dende a seguinte páxina (UD4_session_Ex4_pref_paxina2.???) coas variables de sesión borradas. Nese caso os valores por defecto deben ser de cor verde para o texto e cor marrón para o fondo.
  • A páxina UD4_session_Ex4_pref_paxina2.??? terá un enlace para volver á páxina inicial (UD4_session_Ex4_preferencias.???) outro enlace para volver á páxina anterior (UD4_session_Ex4_pref_paxina1.???) e outro enlace para borrar as preferencias e o id de sesión (farase mesma páxina UD4_session_Ex4_pref_paxina2).


Solución Exercicio 4

Páxina: UD4_session_Ex4_preferencias.html

 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         <title>Exercicio de variables Session</title>
 6         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
 7 
 8     </head>
 9     <body>
10         <form action="UD4_session_Ex4_pref_paxina1.php" method='post'>
11             <div>
12                 Cor de fondo:<select name='lstCorFondo'>
13                     <option value='#ff0000'>Vermello</option>
14                     <option value='#00ff00'>Verde</option>
15                     <option value='#0000ff'>Azul</option>
16                 </select>    
17             </div>    
18             <div>
19                 Cor de texto:<select name='lstCorTexto'>
20                     <option value='#ff0000'>Vermello</option>
21                     <option value='#00ff00'>Verde</option>
22                     <option value='#0000ff'>Azul</option>
23                 </select>    
24             </div>    
25             
26             <input type='submit' value='GARDAR' />
27             
28         </form>
29     </body>
30 </html>

Páxina: UD4_session_Ex4_pref_paxina1.php

 1 <?php
 2     session_start();    // IMPORTANTE
 3     
 4     if(!empty($_POST)){ // Miramos se temos datos que veñan dun formulario
 5         if (!empty($_POST['lstCorTexto'])){
 6             $_SESSION['cor_texto']=$_POST['lstCorTexto'];
 7         }
 8         else {
 9             $_SESSION['cor_texto']='green'; 
10         } 
11         
12         if (!empty($_POST['lstCorFondo'])){
13             $_SESSION['cor_fondo']=$_POST['lstCorFondo'];
14         }
15         else {
16             $_SESSION['cor_fondo']='brown';
17         }
18     }
19     else{
20         if (empty($_SESSION['cor_texto'])){
21             $_SESSION['cor_texto']='green'; 
22         }
23         if (empty($_SESSION['cor_fondo'])){
24             $_SESSION['cor_fondo']='brown';
25         }
26     }
27 ?>
28 
29 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
30     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
31 <html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es">
32     <head>
33         <title>Exercicio de variables Session</title>
34         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
35         <style type="text/css">
36             .estilo{
37                 background-color: <?php echo $_SESSION['cor_fondo'];?>;
38                 color: <?php echo $_SESSION['cor_texto'];?>;
39             }
40         </style>
41     </head>
42     <body>
43         <div class='estilo'>Este é un texto calquera sobre o que se vai a aplicar o estilo escollido na pantalla de preferencias....</div>
44             
45         <a href='UD4_session_Ex4_pref_paxina2.php' >Enlace á páxina 2</a>
46     </body>
47 </html>

Páxina: UD4_session_Ex4_pref_paxina2.php

 1 <?php
 2     session_start();    // IMPORTANTE
 3     
 4     if(!empty($_GET['borrarPreferencias'])){ // Miramos se vimos de premer o enlace de borrar preferencias desta páxina
 5         if ($_GET['borrarPreferencias']==1){   // Comprobamos que valga 1 (poderíamos poñer esta condición cun && na liña anterior.
 6            session_unset();
 7            session_destroy();
 8            setcookie(session_name(),'',0,'/');
 9         }
10     }
11 ?>
12 
13 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
14     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
15 <html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es">
16     <head>
17         <title>Exercicio de variables Session</title>
18         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
19         <style type="text/css">
20             .estilo{
21                 background-color: <?php echo $_SESSION['cor_fondo'];?>; /* Isto dará un warning se temos o display_errors a on xa que se vimos de borrar as variables de session non terá valor */
22                 color: <?php echo $_SESSION['cor_texto'];?>;            /*  Teríamos que comprobar se ten valor (usar o operador ternario) antes de utilizalo */
23             }
24         </style>
25     </head>
26     <body>
27         <div class='estilo'>Este é un texto calquera sobre o que se vai a aplicar o estilo escollido na pantalla de preferencias....</div>
28             
29         <a href='UD4_session_Ex4_preferencias.html' >Enlace á páxina inicial</a>
30         <a href='UD4_session_Ex4_pref_paxina1.php' >Enlace á páxina 1</a>
31         <a href="<?php echo $_SERVER['PHP_SELF']; ?>?borrarPreferencias=1" >Borrar preferencias</a>
32     </body>
33 </html>

Exercicio 5

  • Crea unha páxina de nome UD4_session_Ex5_contador.??? que leve a conta de cantas veces foi visitada a páxina por cada usuario, facendo uso dunha variable de sesión.
Se a variable de sesión non existe deberá ser inicializada a 5 e posteriormente, por cada visita deberá ser incrementado o seu valor. Amosar o número de visitas.

Na mesma páxina amosa un enlace que ao premerse, borre a variable de sesión.


Solución Exercicio 5

 1 <?php
 2 session_start();
 3 
 4 define (VAR_SESSION_NUM_ACCESOS,'numAccesos');    // Isto non é necesario. Simplemente amosamos unha forma de referenciar o nome dunha variable utilizando unha constante. Desta forma non nos podemos equivocar ao teclear o nome da variable á que queremos acceder no array global $_SESSION.
 5 
 6 if (isset($_GET['borrar']) && $_GET['borrar']==1){    // Dentro desta páxina temos en enlace que manda na URL un parámetro da forma ?borrar=1 para eliminar a variable de sesión.
 7     unset($_SESSION[VAR_SESSION_NUM_ACCESOS]);  // => Desta forma o sessionID se mantén o mesmo
 8     session_destroy();
 9     session_start();  // Iniciamos unha nova sesión => Novo sessionID
10 }
11 
12 if (!isset($_SESSION[VAR_SESSION_NUM_ACCESOS])){
13    $_SESSION[VAR_SESSION_NUM_ACCESOS]= 5;
14 }
15 else {
16     $_SESSION[VAR_SESSION_NUM_ACCESOS]++;
17 }
18    
19 ?>
20 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
21     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
22 
23 <html>
24     <head>
25         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
26         <title>Exercicio Session</title>
27     </head>
28     <body>
29 <?php
30     printf("<h1>Número de veces visitas: %s</h1>",$_SESSION[VAR_SESSION_NUM_ACCESOS]);
31     printf("<h2>O valor do ID de sesión é: %s</h2>",  session_id());
32 
33 ?>
34         <h2>Pulsa <a href='UD4_session_Ex5_contador.php?borrar=1'> para borrar o contador...</a></h2>.
35         <h2>Pulsa <a href='UD4_session_Ex5_contador.php'> para incrementar o contador...</a></h2>.
36 
37        
38     </body>
39 </html>


Exercicio 6

  • Fai unha variación do exercicio anterior e garda as veces (a hora) na que un usuario visitou a páxina. O nome da páxina será UD4_session_Ex6_visitas.???. A hora gardarase nun array dentro dunha variable session e será amosado en forma de lista.
Nota: para visualizar a hora podes facer uso da función date.


Solución Exercicio 6

 1 <?php
 2 session_start();
 3 
 4 define (VAR_SESSION_TEMPO_ACCESOS,'tempoAccesos');
 5 if (isset($_GET['borrar']) && $_GET['borrar']==1){
 6     unset($_SESSION[VAR_SESSION_NUM_ACCESOS]);  // => Desta forma o sessionID se mantén o mesmo
 7     session_destroy();
 8     session_start();  // Iniciamos unha nova sesión xa que queremos gardar o valor por defecto das visitas
 9     
10 }
11 
12 if (!isset($_SESSION[VAR_SESSION_TEMPO_ACCESOS])){
13    $_SESSION[VAR_SESSION_TEMPO_ACCESOS]= array();
14 }
15 else {
16     $_SESSION[VAR_SESSION_TEMPO_ACCESOS][]=  date('l jS \de F Y h:i:s A');
17 }
18    
19 ?>
20 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
21     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
22 
23 <html>
24     <head>
25         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
26         <title>Exercicio Session</title>
27     </head>
28     <body>
29 <?php
30     printf("<h1>Número de veces visitas: </h1>");
31     foreach($_SESSION[VAR_SESSION_TEMPO_ACCESOS] as $valor){
32         printf("<h3 style='margin-left:10px'>%s</h3>",$valor);
33     }
34     printf("<h2>O valor do ID de sesión é: %s</h2>",  session_id());
35 
36 ?>
37         <h2>Pulsa <a href='UD4_session_Ex6_visitas.php?borrar=1'> para borrar o histórico de visitas...</a></h2>.
38         <h2>Pulsa <a href='UD4_session_Ex6_visitas.php'> para unha nova visita...</a></h2>.
39 
40        
41     </body>
42 </html>


Exercicio 7

•Crea un arquivo 'include' de nome Carrito_Compra.???.???. ◾A funcionalidade de dito arquivo será a seguinte: ◾Gardar nunha variable de sesión un array no que se garde o nome do produto, prezo e cantidade escollido polo usuario. ◾Terá unha función de nome calcularTotal, que devolva o total do pedido en base ao gardado na variable anterior. ◾Terá unha función de nome baleirarCarrito que baleire o carrito. ◾Terá unha función de nome amosarCarrito que amose, en formato HTML unha táboa flotando á dereita, na que se visualizará unha liña por cada produto engadido ao carrito e unha liña final co total do pedido. Tamén visualizará unha imaxe para baleirar o carrito. En caso de premer nela chamarase á función baleirarCarrito.

◾Terá unha función de nome engadirProduto. Terá de parámetros o nome do produto, cantidade e prezo individual. Engadirá o produto ao array que se atopa na variable de sesión.

•Crea un arquivo include de nome Produtos.???.??? no que estean definidos nun array o listado de produtos que vai poder mercar o usuario. Dito array gardará o nome do produto e o seu prezo unitario.

•Crea unha páxina de nome ListadoProductos,???.

◾Dita páxina terá: ◾Visualizará en todo momento o contido do carrito chamando á función amosarCarrito. ◾Visualizará dentro dun formulario os produtos definidos no arquivo de 'include' Produtos.???.???. O usuario poderá escribir o número de unidades por cada un dos produtos (visualizar os produtos segundo o visto neste punto da wiki). Ao lado de cada produto haberá un imaxe dun carrito e ao premer nela engadirase dito produto ao carrito chamando á función engadirProduto. ◾Terá un enlace á páxina FinalizarCompra.??? na que se amosará o carrito completo. •Crea unha páxina de nome FinalizarCompra.??? que amose o contido do carrito e finalice a sesión do usuario.


Solución Exercicio 7

  • Partimos da base que temos os produtos nun array e polo tanto o que temos que descubrir é o índice do array e a cantidade do produto asociado á imaxe do carrito.
O problema que ides ter é como enviar a través dunha imaxe (o carrito) o índice do array (tamén poderiades facelo cun array asociativo no que a clave fose o código do produto, neste caso teríamos que enviar o código do produto e a cantidade escollida).


  • Teríamos varias aproximacións:
  • Poderíamos facer un formulario individual por cada produto de tal forma que ao premer sobre o carrito xa enviamos os datos do produto (poderíamos ter o índice do array nun campo oculto).
  • Poderíamos utilizar un único formulario e usar JavaScript para que cando prememos sobre a imaxe, cambie o valor dun campo oculto polo valor do índice do array que se corresponde ao produto. Tamén poderíamos cambiar o action e enviar en forma de parámetro dito índice.
  • Poderíamos utilizar un único formulario e asociar a cada produto un botón cun value igual ao índice do array e dentro do botón unha imaxe do carrito. Cando prememos a imaxe estaremos premendo o botón e polo tanto poderemos recuperar o seu value. O nome do botón será único (non será un 'array' coma os produtos) xa que soamente queremos recuperar o valor do produto seleccionado. A continuación se amosa un exemplo da implementación desta solución:


Páxina: UD4_session_Ex7_carrito_1.php

 1 <?php
 2 
 3 $prod1=array("DISCO DURO 1 TB",123.5);
 4 $prod2=array("MONITOR 23' HP",223.5);
 5 $prod3=array("CPU I5 2GHZ",53);
 6 $produtos = array($prod1,$prod2,$prod3);  // Un exemplo de produtos gardados nun array
 7 
 8 
 9 if (isset($_POST['carrito'])){
10 
11     // Habería que comprobar con filter_var que $_POST['cantidade'] e $_POST['carrito'] sexa un número
12     // Coidado con poñer isset xa que o índice 0 o interpretaría como baleiro.
13 
14     echo "Traemos algo";     // Amosamos os datos a modo de exemplo. Non debemos facelo aquí xa que estamos fora de body. Aquí iría o código que engade o produto a o array de produtos escollidos e que gardaríamos nunha variable de sesión.
15     echo "<br />";
16     echo "Referencia no array:" . $_POST['carrito'];
17     echo "<br />";
18     echo "PRODUTO:" . $produtos[$_POST['carrito']][0] . " e cantidade escollida:" . $_POST['cantidade'][$_POST['carrito']];
19 
20 }
21 ?>
22 
23 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
24     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
25 <html>
26     <head>
27         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
28         <title>Exercicio Session</title>
29     </head>
30 
31     <body>
32         <form action="UD4_session_Ex7_carrito_1.php" method="post">
33 
34 <?php
35 
36     foreach ($produtos as $key=>$p) {
37 
38         printf("<div>%s => %s <input type='text' size='2' maxlength='2' name='cantidade[]' /><button type='submit' name='carrito' value='%d'><input type='image' src='carrito.jpg' style='width:20px;height:20px' /></button></div>",$p[0], number_format($p[1],2),$key);
39 
40     }
41 
42 ?>
43 
44         </form>
45     </body>
46 </html>





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