PHP EXERCICIOS SESSION
Sumario
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).