PHP EXERCICIOS COOKIES

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

Exercicio 1

  • Crea unha páxina de nome 'UD4_cookie_ex1_paxina1.???' que cargue nunha cookie de nome 'tempo' o momento no que se conecta a dita páxina (en segundos => mirar función time()).
Se a cookie existe cando volvas a cargar a páxina amosará o tempo en minutos e segundos de canto tempo pasou dende a primeira vez que se conectou.
Para obter o tempo en minutos deberedes dividir entre 60, pero ides obter un número decimal polo que teredes que aplicar a función intval.
Terá un enlace que cargará a páxina 'UD4_cookie_ex1_borrar.???' que borre a cookie 'tempo' e cargue a páxina inicial.
O tempo de vida da cookie será de 3 minutos.


Solución Exercicio 1

Páxina UD4_cookie_ex1_paxina1.php

 1 <?php
 2 
 3     $segundos=0;
 4     $minutos=0;
 5     if (empty($_COOKIE['tempo'])){
 6         setcookie('tempo',time(),time()+3*60);
 7     }
 8     else {  // Xa estaba a cookie gardada
 9         $segundos = time()-$_COOKIE['tempo'];
10         $minutos = intval($segundos/60);
11         $segundos = $segundos-($minutos*60);
12     }
13     
14     
15 ?>
16 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
17     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
18 
19 <html>
20     <head>
21         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
22         <title>Exercicios de cookies</title>
23     </head>
24     <body>
25         <p>
26             <?php
27                 printf("Levas %s minutos e %s segundos conectados.",$minutos,$segundos);
28             ?>
29         </p>
30         
31         <h2>Pulsa <a href='UD4_cookie_ex1_borrar.php'> para borrar a cookie</a></h2>
32         
33     </body>
34 </html>

Páxina UD4_cookie_ex1_borrar.php

1 <?php
2 
3 if (!empty($_COOKIE['tempo'])){
4     setcookie('tempo',null,1);
5 
6 }
7 
8 header("Location: UD4_cookie_ex1_paxina1.php");


Exercicio 2

Chama as páxinas: UD4_cookies_ex2_????????????? en vez do nome indicado no exercicio 4.


Solución Exercicio 2

Páxina UD4_cookies_ex2_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 cookies</title>
 6         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
 7 
 8     </head>
 9     <body>
10         <form action="UD4_cookies_ex2_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_cookies_ex2_paxina1.php

 1 <?php
 2 
 3     if(!empty($_POST)){ // Miramos se temos datos que veñan dun formulario
 4         if (!empty($_POST['lstCorTexto'])){
 5             setcookie('cor_texto',$_POST['lstCorTexto'],time()+10*60);
 6             // ATENCIÓN
 7             // Non se vai gardar no cliente ata que se remate de procesar a páxina.
 8             // Por tanto $_COOKIE['cor_texto'] non vale nada.
 9             // Se tivesemos unha páxinas 'intermedia' para crear a cookie e despois facer un header(location) xa funcionaría.
10             // Para solucionalo, asinamos ao array $_COOKIE o valor directamente.
11             $_COOKIE['cor_texto']=$_POST['lstCorTexto'];
12         }   
13 
14         if (!empty($_POST['lstCorFondo'])){
15             setcookie('cor_fondo',$_POST['lstCorFondo'],time()+10*60);
16             $_COOKIE['cor_fondo']=$_POST['lstCorFondo'];
17         }
18     }
19     else{
20         if (empty($_COOKIE['cor_texto'])){
21             setcookie('cor_texto','green',time()+10*60);
22             $_COOKIE['cor_texto']='green';
23         }
24         if (empty($_COOKIE['cor_fondo'])){
25             setcookie('cor_fondo','brown',time()+10*60);
26             $_COOKIE['cor_fondo']='brown';
27         }
28     }
29 ?>
30 
31 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
32     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
33 <html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es">
34     <head>
35         <title>Exercicio de cookies</title>
36         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
37         <style type="text/css">
38             .estilo{
39                 background-color: <?php echo $_COOKIE['cor_fondo'];?>;
40                 color: <?php echo $_COOKIE['cor_texto'];?>;
41             }
42         </style>
43     </head>
44     <body>
45         <div class='estilo'>Este é un texto calquera sobre o que se vai a aplicar o estilo escollido na pantalla de preferencias....</div>
46 
47         <a href='UD4_cookies_ex2_pref_paxina2.php' >Enlace á páxina 2</a>
48     </body>
49 </html>


Páxina UD4_cookies_ex2_paxina2.php

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


Exercicio 3

  • Nota: Utiliza variable de sesión.
  • Crea unha páxina de nome UD4_cookies_ex3_listado.???' na que apareza un formulario cunha lista de tres nomes que representan a alumnos e unha caixa de texto que representa a nota que se lle vai dar ao alumno seleccionado na lista.
Os nomes dos alumnos veñen dunha variable $alumnos que é un array cos nomes dos alumnos.
O action do formulario 'apunta' á páxina 'UD4_cookies_ex3_gardar_cookie.???'.
A páxina amosará na parte baixa (despois do formulario) a lista de alumnos aos que se lles asinou unha nota así como o nome do último alumnos ao que se asinou a nota.
A lista de alumnos xunto coas notas estarán gardados nun array dentro dunha variable de sesión de nome 'notas' e o nome do alumno estará nunha cookie de nome 'nome'.
  • Páxina 'UD4_cookies_ex3_gardar_cookie.???': Se non se envían datos do formulario cargará a páxina anterior. Se se envían datos, gardarase nun array asociativo, formado polos campos 'nome' e 'nota', o nome do alumno seleccionado e a nota introducida no formulario anterior. Este dato gardarase nun array na variable de sesión 'notas'. Polo tanto dita variable estará formada por un array de arrays.
O nome do alumno seleccionado será gardado nunha cookie de nome 'nome'.
Unha vez gardados os datos cargarase a páxina UD4_cookies_ex3_listado.???'.


Solución Exercicio 3

Páxina UD4_cookies_ex3_listado.php

 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 <html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es">
 8     <head>
 9         <title>Exercicios cookies</title>
10         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
11 
12     </head>
13     <body>
14         <form action="UD4_cookies_ex3_gardar_cookie.php" method='post'>
15             <div>
16                 Nome:<select name='lstNome'>
17                 <?php
18                     $usuarios=['Pedro','Luis','Juan'];
19                     foreach($usuarios as $usuario){
20                         printf("<option>%s</option>",$usuario);
21                     }
22                 ?>
23                 </select>    
24             </div>    
25             <div>
26                 Nota:<input type='text' size='2' maxlength="2" name="txtNota" />    
27             </div>    
28 
29             <input type='submit' value='GARDAR' />
30 
31         </form>
32         
33         <?php
34             if(!empty($_SESSION['notas'])){
35                 echo "As notas dadas ata o de agora son:<br />";
36                 $notas = $_SESSION['notas'];
37                 
38                 echo "<ol>";
39                 foreach($notas as $nota) {
40                     printf("<li>Nome:%s--->%s",$nota['nome'],$nota['nota']);
41                 }
42                 echo "</ol>";
43                 
44             }
45             if(!empty($_COOKIE['nome'])){
46                 printf("<p>O último alumno engadida a nota foi %s",$_COOKIE['nome']);
47             }
48         ?>
49         
50     </body>
51 </html>


Páxina UD4_cookies_ex3_gardar_cookie.php

 1 <?php
 2 session_start();
 3 
 4 if (!empty($_POST)){
 5     $nome=filter_var($_POST['lstNome'],FILTER_SANITIZE_STRING);
 6     if (filter_var($_POST['txtNota'],FILTER_VALIDATE_INT) &&
 7         $_POST['txtNota'] > 0 &&
 8         $_POST['txtNota'] <= 10) {
 9     
10         $nota = ['nome'=>$nome,'nota'=>$_POST['txtNota']];
11         $_SESSION['notas'][] = $nota;
12         setcookie("nome",$nome);
13     }
14 }
15 
16 header("Location:UD4_cookies_ex3_listado.php");







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