PHP EXERCICIOS SESSION
Sumario
Exercicios Unidade 4: Sessions
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 na mesma páxina, pasando o control á páxina inicial.
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 temos datos que veñan dun formulario 5 if ($_GET['borrarPreferencias']==1){ // Nos aseguramos que vimos de premer o botón de borrar as preferencias 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'];?>; 22 color: <?php echo $_SESSION['cor_texto'];?>; 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 por un usuario dentro dunha sesión.
- Se a variable 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
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.
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 calcularTotral, 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.
Ideas para implementar o carrito do 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:
<?php
$prod1=array("DISCO DURO 1 TB",123.5);
$prod2=array("MONITOR 23' HP",223.5);
$prod3=array("CPU I5 2GHZ",53);
$produtos = array($prod1,$prod2,$prod3);
if (isset($_POST['carrito'])){
// Habería que comprobar con filter_var que $_POST['cantidade'] e $_POST['carrito'] sexa un número
// Coidado con poñer isset xa que o índice 0 o interpretaría como baleiro.
echo "Traemos algo";
echo "
";
echo "Referencia no array:" . $_POST['carrito'];
echo "
";
echo "PRODUTO:" . $produtos[$_POST['carrito']][0] . " e cantidade escollida:" . $_POST['cantidade'][$_POST['carrito']];
}
?>
<!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>
<form action="UD4_session_Ex4_carrito_1.php" method="post">
<?php
foreach ($produtos as $key=>$p) {
printf("
",$p[0], number_format($p[1],2),$key);
}
?>
</form> </body>
</html>
-- Ángel D. Fernández González -- (2017).