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_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_Ex1_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_Ex1_pref_paxina2.???. A esta páxina podemos volver dende a seguinte páxina (UD4_session_Ex1_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_Ex1_pref_paxina2.??? terá un enlace para volver á páxina inicial (UD4_session_Ex1_preferencias.???) outro enlace para volver á páxina anterior (UD4_session_Ex1_pref_paxina1.???) e outro enlace para borrar as preferencias e o id de sesión (farase mesma páxina UD4_session_Ex1_pref_paxina2).


Solución Exercicio 1

Páxina: UD4_session_Ex1_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_Ex1_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_Ex1_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         
 9         if (!empty($_POST['lstCorFondo'])){
10             $_SESSION['cor_fondo']=$_POST['lstCorFondo'];
11         }
12     }
13     else{
14         if (empty($_SESSION['cor_texto'])){
15             $_SESSION['cor_texto']='green'; 
16         }
17         if (empty($_SESSION['cor_fondo'])){
18             $_SESSION['cor_fondo']='brown';
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 xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es">
26     <head>
27         <title>Exercicio de variables Session</title>
28         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
29         <style type="text/css">
30             .estilo{
31                 background-color: <?php echo $_SESSION['cor_fondo'];?>;
32                 color: <?php echo $_SESSION['cor_texto'];?>;
33             }
34         </style>
35     </head>
36     <body>
37         <div class='estilo'>Este é un texto calquera sobre o que se vai a aplicar o estilo escollido na pantalla de preferencias....</div>
38             
39         <a href='UD4_session_Ex1_pref_paxina2.php' >Enlace á páxina 2</a>
40     </body>
41 </html>

Páxina: UD4_session_Ex1_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_Ex1_preferencias.html' >Enlace á páxina inicial</a>
30         <a href='UD4_session_Ex1_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 2

  • Crea unha páxina de nome UD4_session_Ex2_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 2

 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 2 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_Ex2_contador.php?borrar=1'> para borrar o contador...</a></h2>.
35         <h2>Pulsa <a href='UD4_session_Ex2_contador.php'> para incrementar o contador...</a></h2>.
36 
37        
38     </body>
39 </html>


Exercicio 3

  • 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_Ex3_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 3

 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 3 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_Ex3_visitas.php?borrar=1'> para borrar o histórico de visitas...</a></h2>.
38         <h2>Pulsa <a href='UD4_session_Ex3_visitas.php'> para unha nova visita...</a></h2>.
39 
40        
41     </body>
42 </html>

Exercicio 4

•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 4

  • 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_Ex4_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 4 Session</title>
29     </head>
30 
31     <body>
32         <form action="UD4_session_Ex4_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).