From 779028b5e6aad6339e75b9f41534560aca79ef96 Mon Sep 17 00:00:00 2001 From: Frank20060 <159519815+Frank20060@users.noreply.github.com> Date: Fri, 12 Sep 2025 14:48:55 +0000 Subject: [PATCH 01/34] .ff --- index.php | 1 + 1 file changed, 1 insertion(+) diff --git a/index.php b/index.php index f15e9353..159b85ae 100644 --- a/index.php +++ b/index.php @@ -19,6 +19,7 @@ function sayHello($name) { Date: Fri, 12 Sep 2025 15:14:25 +0000 Subject: [PATCH 02/34] prueba1 --- practicas/pp1-primera-app. /hola.php | 30 ++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 practicas/pp1-primera-app. /hola.php diff --git a/practicas/pp1-primera-app. /hola.php b/practicas/pp1-primera-app. /hola.php new file mode 100644 index 00000000..81625483 --- /dev/null +++ b/practicas/pp1-primera-app. /hola.php @@ -0,0 +1,30 @@ + + + + + Visual Studio Code Remote :: PHP + + + + +

+ + \ No newline at end of file From 05cf727d06684402f820c6ebdd836682853eda81 Mon Sep 17 00:00:00 2001 From: Frank20060 <159519815+Frank20060@users.noreply.github.com> Date: Fri, 12 Sep 2025 15:18:31 +0000 Subject: [PATCH 03/34] prueba2 --- index.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.php b/index.php index 159b85ae..bf9747d3 100644 --- a/index.php +++ b/index.php @@ -18,7 +18,7 @@ function sayHello($name) { Date: Fri, 12 Sep 2025 15:21:30 +0000 Subject: [PATCH 04/34] volvemos_al_principio --- index.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.php b/index.php index bf9747d3..159b85ae 100644 --- a/index.php +++ b/index.php @@ -18,7 +18,7 @@ function sayHello($name) { Date: Fri, 12 Sep 2025 15:30:27 +0000 Subject: [PATCH 05/34] prueba1 --- index.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.php b/index.php index 159b85ae..2454cb73 100644 --- a/index.php +++ b/index.php @@ -18,7 +18,7 @@ function sayHello($name) { Date: Mon, 15 Sep 2025 12:37:31 +0000 Subject: [PATCH 06/34] finalizado(creo) --- practicas/pp1-primera-app. /hola.php | 30 ---------- practicas/pp1-primera-app/hola.php | 55 ++++++++++++++++++ .../imagenes/logo-fpllefia.jfif | Bin 0 -> 5641 bytes practicas/pp1-primera-app/imagenes/yo.jpg | Bin 0 -> 71436 bytes 4 files changed, 55 insertions(+), 30 deletions(-) delete mode 100644 practicas/pp1-primera-app. /hola.php create mode 100644 practicas/pp1-primera-app/hola.php create mode 100644 practicas/pp1-primera-app/imagenes/logo-fpllefia.jfif create mode 100644 practicas/pp1-primera-app/imagenes/yo.jpg diff --git a/practicas/pp1-primera-app. /hola.php b/practicas/pp1-primera-app. /hola.php deleted file mode 100644 index 81625483..00000000 --- a/practicas/pp1-primera-app. /hola.php +++ /dev/null @@ -1,30 +0,0 @@ - - - - - Visual Studio Code Remote :: PHP - - - - -

- - \ No newline at end of file diff --git a/practicas/pp1-primera-app/hola.php b/practicas/pp1-primera-app/hola.php new file mode 100644 index 00000000..8ac2c8f3 --- /dev/null +++ b/practicas/pp1-primera-app/hola.php @@ -0,0 +1,55 @@ + + + + + Visual Studio Code Remote :: PHP + + + +
+ Logo del col·legi FP Llefià +

Módulo 7 - Práctica 1. Mi primera aplicación en PHP

+
+
+
+
+ Una foto mia +

Frank Villar Redondo

+
+
+

Explicacion codigo señalado

+

+ < ?php= es lo que se usa para abrir un bloque de codigo en php que se va ha ejecutar. + Lo segudo que esta marcado es una funcion en php que que muestra por pantalla (con el comando echo) "Hello" y lo que le pasemos con la variable name. Esta dentro de un bloque de codigo de php. + El tercer recuadro muestra como se ejecuta la funcion que hemos creado anterirmente, lo que hay entre parentesis es el contenido que tiene la variable name. + El cuarto llama a una funcion que ya estara creada y que muetestra la info del servidor. + +

+
+
+
+ +

Frank Villar Redondo

+ + + + + + \ No newline at end of file diff --git a/practicas/pp1-primera-app/imagenes/logo-fpllefia.jfif b/practicas/pp1-primera-app/imagenes/logo-fpllefia.jfif new file mode 100644 index 0000000000000000000000000000000000000000..c02ab4e1a4e7f1a844701c796fd85aabeca2a169 GIT binary patch literal 5641 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 Wp%xu6ar87X5iv3UAC>CG%zpuy(OESB literal 0 HcmV?d00001 diff --git a/practicas/pp1-primera-app/imagenes/yo.jpg b/practicas/pp1-primera-app/imagenes/yo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..02f047fecc24ad16f57709a1cf60506e6eb30c3f GIT binary patch literal 71436 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 Date: Mon, 15 Sep 2025 13:56:54 +0000 Subject: [PATCH 07/34] resultado-css1 --- practicas/pp1-primera-app/estilo.css | 36 ++++++++++++++++++++++++++ practicas/pp1-primera-app/hola.php | 38 ++++++++++++++-------------- 2 files changed, 55 insertions(+), 19 deletions(-) create mode 100644 practicas/pp1-primera-app/estilo.css diff --git a/practicas/pp1-primera-app/estilo.css b/practicas/pp1-primera-app/estilo.css new file mode 100644 index 00000000..7eb8a6e1 --- /dev/null +++ b/practicas/pp1-primera-app/estilo.css @@ -0,0 +1,36 @@ + +header{ + display:flex; + gap : 40px; + align-items: center; + color: rgba(1, 1, 61, 0.747); + justify-content: space-between; + height: 20%; +} +body{ + font-family: Arial, Helvetica, sans-serif; + margin-left: 10%; + margin-right: 10%; +} +main{ + justify-items: center; + text-align: center; + justify-content: space-between; + height: 60%; +} +main p{ + text-align: justify; + width: 1000px; +} +.fotopersonal{ + + justify-items: center; + +} +footer{ + text-align: center; + height: 10%; + font-size: 22px; + color: rgba(1, 1, 61, 0.747); + font-weight: bold; +} \ No newline at end of file diff --git a/practicas/pp1-primera-app/hola.php b/practicas/pp1-primera-app/hola.php index 8ac2c8f3..7d7ba36b 100644 --- a/practicas/pp1-primera-app/hola.php +++ b/practicas/pp1-primera-app/hola.php @@ -1,55 +1,55 @@ "; } - ?> Visual Studio Code Remote :: PHP + -

+
Logo del col·legi FP Llefià

Módulo 7 - Práctica 1. Mi primera aplicación en PHP

-
- Una foto mia +
+
+ Una foto mia +
+

Frank Villar Redondo

-
+

Explicacion codigo señalado

- < ?php= es lo que se usa para abrir un bloque de codigo en php que se va ha ejecutar. - Lo segudo que esta marcado es una funcion en php que que muestra por pantalla (con el comando echo) "Hello" y lo que le pasemos con la variable name. Esta dentro de un bloque de codigo de php. +

- -

Frank Villar Redondo

+
+

Frank Villar Redodno

- - +
+ \ No newline at end of file From dbe849523ab4eef10fe1f12142c9a70059f4fd88 Mon Sep 17 00:00:00 2001 From: Frank20060 <159519815+Frank20060@users.noreply.github.com> Date: Mon, 15 Sep 2025 14:00:56 +0000 Subject: [PATCH 08/34] resultado-css2 --- practicas/pp1-primera-app/estilo.css | 88 ++++++++++++++++++++-------- 1 file changed, 65 insertions(+), 23 deletions(-) diff --git a/practicas/pp1-primera-app/estilo.css b/practicas/pp1-primera-app/estilo.css index 7eb8a6e1..28aeada0 100644 --- a/practicas/pp1-primera-app/estilo.css +++ b/practicas/pp1-primera-app/estilo.css @@ -1,36 +1,78 @@ -header{ - display:flex; - gap : 40px; - align-items: center; - color: rgba(1, 1, 61, 0.747); - justify-content: space-between; - height: 20%; +/* === Reset básico === */ +* { + margin: 0; + padding: 0; + box-sizing: border-box; } -body{ + +body { font-family: Arial, Helvetica, sans-serif; - margin-left: 10%; - margin-right: 10%; + background-color: #fff; + color: #333; + line-height: 1.6; } -main{ - justify-items: center; - text-align: center; + +/* === Header === */ +header { + display: flex; + height: 20%; justify-content: space-between; - height: 60%; + align-items: center; + background-color: #1e1e1e; + color: white; + padding: 20px 40px; } -main p{ - text-align: justify; - width: 1000px; + +header img { + height: 60px; } -.fotopersonal{ - justify-items: center; +header h1 { + font-size: 1.5rem; + font-weight: normal; +} +/* === Main === */ +main { + display: flex; + height: 60%; + justify-content: center; + align-items: flex-start; + padding: 40px; + gap: 60px; } -footer{ + +/* Foto personal */ +.fotopersonal { text-align: center; +} + + +.fotopersonal h2 { + margin-top: 15px; + +} + +/* Texto explicativo */ +main h3 { + margin-bottom: 15px; + font-size: 1.3rem; +} + +main p { + max-width: 600px; + font-size: 0.95rem; + color: #444; +} + +/* === Footer === */ +footer { height: 10%; - font-size: 22px; - color: rgba(1, 1, 61, 0.747); - font-weight: bold; + background-color: #1e1e1e; + color: white; + text-align: center; + padding: 15px; + font-size: 0.9rem; + margin-top: 40px; } \ No newline at end of file From 742197630e6d6fa3f8418de445df3e13e07b7203 Mon Sep 17 00:00:00 2001 From: Frank20060 <159519815+Frank20060@users.noreply.github.com> Date: Mon, 15 Sep 2025 14:01:59 +0000 Subject: [PATCH 09/34] resultado-css-final --- practicas/pp1-primera-app/estilo.css | 88 ++++++++-------------------- 1 file changed, 23 insertions(+), 65 deletions(-) diff --git a/practicas/pp1-primera-app/estilo.css b/practicas/pp1-primera-app/estilo.css index 28aeada0..7eb8a6e1 100644 --- a/practicas/pp1-primera-app/estilo.css +++ b/practicas/pp1-primera-app/estilo.css @@ -1,78 +1,36 @@ -/* === Reset básico === */ -* { - margin: 0; - padding: 0; - box-sizing: border-box; +header{ + display:flex; + gap : 40px; + align-items: center; + color: rgba(1, 1, 61, 0.747); + justify-content: space-between; + height: 20%; } - -body { +body{ font-family: Arial, Helvetica, sans-serif; - background-color: #fff; - color: #333; - line-height: 1.6; + margin-left: 10%; + margin-right: 10%; } - -/* === Header === */ -header { - display: flex; - height: 20%; +main{ + justify-items: center; + text-align: center; justify-content: space-between; - align-items: center; - background-color: #1e1e1e; - color: white; - padding: 20px 40px; -} - -header img { - height: 60px; -} - -header h1 { - font-size: 1.5rem; - font-weight: normal; -} - -/* === Main === */ -main { - display: flex; height: 60%; - justify-content: center; - align-items: flex-start; - padding: 40px; - gap: 60px; -} - -/* Foto personal */ -.fotopersonal { - text-align: center; } - - -.fotopersonal h2 { - margin-top: 15px; - +main p{ + text-align: justify; + width: 1000px; } +.fotopersonal{ -/* Texto explicativo */ -main h3 { - margin-bottom: 15px; - font-size: 1.3rem; -} + justify-items: center; -main p { - max-width: 600px; - font-size: 0.95rem; - color: #444; } - -/* === Footer === */ -footer { - height: 10%; - background-color: #1e1e1e; - color: white; +footer{ text-align: center; - padding: 15px; - font-size: 0.9rem; - margin-top: 40px; + height: 10%; + font-size: 22px; + color: rgba(1, 1, 61, 0.747); + font-weight: bold; } \ No newline at end of file From 666ed93c87b53cdb43f1fe27427002b4963836eb Mon Sep 17 00:00:00 2001 From: Frank20060 <159519815+Frank20060@users.noreply.github.com> Date: Mon, 15 Sep 2025 14:10:51 +0000 Subject: [PATCH 10/34] pruebas1 --- practicas/pruebas/Bootstrap/prueba1.php | 138 ++++++++++++++++++++++++ 1 file changed, 138 insertions(+) create mode 100644 practicas/pruebas/Bootstrap/prueba1.php diff --git a/practicas/pruebas/Bootstrap/prueba1.php b/practicas/pruebas/Bootstrap/prueba1.php new file mode 100644 index 00000000..e00e9151 --- /dev/null +++ b/practicas/pruebas/Bootstrap/prueba1.php @@ -0,0 +1,138 @@ + + + + + + + Mi Portafolio - Bootstrap + + + + + + + + + + + +
+

¡Hola! Soy Desarrollador Web

+

Construyo sitios web modernos, responsivos y rápidos.

+ Ver Proyectos +
+ + +
+

Mis Proyectos

+
+
+
+ Proyecto 1 +
+
Proyecto 1
+

Descripción breve del proyecto.

+ Ver más +
+
+
+
+
+ Proyecto 2 +
+
Proyecto 2
+

Descripción breve del proyecto.

+ Ver más +
+
+
+
+
+ Proyecto 3 +
+
Proyecto 3
+

Descripción breve del proyecto.

+ Ver más +
+
+
+
+
+ + +
+

Sobre mí

+

Soy un desarrollador apasionado por el diseño y la tecnología. + Me gusta crear soluciones digitales que sean útiles y atractivas para los usuarios.

+
+ + +
+

Contacto

+
+
+ + +
+
+ + +
+
+ + +
+ +
+
+ + +
+

© Mi Portafolio. Todos los derechos reservados.

+
+ + + + + From ae17ce45a99156d99d3b5e6d7fd422ce617c1861 Mon Sep 17 00:00:00 2001 From: Frank20060 <159519815+Frank20060@users.noreply.github.com> Date: Mon, 15 Sep 2025 14:25:47 +0000 Subject: [PATCH 11/34] nada --- practicas/pruebas/Bootstrap/prueba1.php | 138 ------------------------ 1 file changed, 138 deletions(-) delete mode 100644 practicas/pruebas/Bootstrap/prueba1.php diff --git a/practicas/pruebas/Bootstrap/prueba1.php b/practicas/pruebas/Bootstrap/prueba1.php deleted file mode 100644 index e00e9151..00000000 --- a/practicas/pruebas/Bootstrap/prueba1.php +++ /dev/null @@ -1,138 +0,0 @@ - - - - - - - Mi Portafolio - Bootstrap - - - - - - - - - - - -
-

¡Hola! Soy Desarrollador Web

-

Construyo sitios web modernos, responsivos y rápidos.

- Ver Proyectos -
- - -
-

Mis Proyectos

-
-
-
- Proyecto 1 -
-
Proyecto 1
-

Descripción breve del proyecto.

- Ver más -
-
-
-
-
- Proyecto 2 -
-
Proyecto 2
-

Descripción breve del proyecto.

- Ver más -
-
-
-
-
- Proyecto 3 -
-
Proyecto 3
-

Descripción breve del proyecto.

- Ver más -
-
-
-
-
- - -
-

Sobre mí

-

Soy un desarrollador apasionado por el diseño y la tecnología. - Me gusta crear soluciones digitales que sean útiles y atractivas para los usuarios.

-
- - -
-

Contacto

-
-
- - -
-
- - -
-
- - -
- -
-
- - -
-

© Mi Portafolio. Todos los derechos reservados.

-
- - - - - From 35bdda6069e8e24674b2d5f4d347637485cd9e5d Mon Sep 17 00:00:00 2001 From: Frank20060 <159519815+Frank20060@users.noreply.github.com> Date: Mon, 15 Sep 2025 15:12:22 +0000 Subject: [PATCH 12/34] css bien --- practicas/pp1-primera-app/estilo.css | 83 ++++++++++++++++++++-------- 1 file changed, 59 insertions(+), 24 deletions(-) diff --git a/practicas/pp1-primera-app/estilo.css b/practicas/pp1-primera-app/estilo.css index 7eb8a6e1..8ca202d8 100644 --- a/practicas/pp1-primera-app/estilo.css +++ b/practicas/pp1-primera-app/estilo.css @@ -1,36 +1,71 @@ - -header{ - display:flex; - gap : 40px; - align-items: center; - color: rgba(1, 1, 61, 0.747); - justify-content: space-between; - height: 20%; +* { + margin: 0; + padding: 0; + box-sizing: border-box; } -body{ + +body { font-family: Arial, Helvetica, sans-serif; - margin-left: 10%; - margin-right: 10%; + background-color: #fff; + color: #333; + line-height: 1.6; } -main{ - justify-items: center; - text-align: center; + +header { + display: flex; + height: 20%; justify-content: space-between; - height: 60%; + align-items: center; + background-color: #1e1e1e; + color: white; + padding: 20px 40px; } -main p{ - text-align: justify; - width: 1000px; + +header img { + height: 100px; } -.fotopersonal{ - justify-items: center; +header h1 { + font-size: 1.5rem; + font-weight: normal; +} +main { + display: flex; + height: 60%; + justify-content: center; + align-items: flex-start; + padding: 40px; + gap: 60px; } -footer{ + +.fotopersonal { text-align: center; +} + + +.fotopersonal h2 { + margin-top: 15px; + +} + +main h3 { + margin-bottom: 15px; + font-size: 1.3rem; +} + +main p { + max-width: 600px; + font-size: 0.95rem; + color: #444; +} + +footer { height: 10%; - font-size: 22px; - color: rgba(1, 1, 61, 0.747); - font-weight: bold; + background-color: #1e1e1e; + color: white; + text-align: center; + padding: 15px; + font-size: 0.9rem; + margin-top: 40px; } \ No newline at end of file From 3fd75c38618b21610109b0c8d07a5adcb140ab92 Mon Sep 17 00:00:00 2001 From: Frank20060 <159519815+Frank20060@users.noreply.github.com> Date: Fri, 19 Sep 2025 15:19:32 +0000 Subject: [PATCH 13/34] teoria-precticaTablaPeliculas --- practicas/teoria/teoria1/intro.php | 154 +++++++++++++++++++++++++++++ 1 file changed, 154 insertions(+) create mode 100644 practicas/teoria/teoria1/intro.php diff --git a/practicas/teoria/teoria1/intro.php b/practicas/teoria/teoria1/intro.php new file mode 100644 index 00000000..06e5395a --- /dev/null +++ b/practicas/teoria/teoria1/intro.php @@ -0,0 +1,154 @@ + + + + + + + + pp1 php + + + +

hola pp1 php

+ + + + hola subtitulo"; + echo 'hola mundo con comillas simples'; + echo "
"; + + $nombre = 'Frank'; + $apellido = "Villar"; + $edad = 19; + $frase = "hola soy $nombre $apellido y tengo $edad años"; ///Esto es nuevo, la forma antigua seria l siguiente + $frase2 = "hola soy " . $nombre ." ". $apellido . " y tengo " . $edad . " años"; + + $frase3 = "hola soy {$nombre} {$apellido} y tengo {$edad} años"; + + echo $frase; + echo "
"; + echo $frase2; + echo "
"; + echo $frase3; + echo "
"; + + + ////Condicionales + + //if + + if($edad<22){ + echo "eres mayor de edad"; + }else{ + echo "eres menor de edad"; + } + + + ?> + +
+

Numeros del 0 - 10 usando un bucle

+ Numero: {$i}
"; + //echo "
Numero: {$i}
"; + + } + + ?> +
+ + + +

Mis peliculas favoritas

+ + + + + + + + + + + + + + + "; + + }else{ + + echo " + + + + + + + "; + + } + + } + ?> +
NombreImagenValoración
$posicion$peliculas[$i]imagen$valoraciones[$i]
$posicion$peliculas[$i] imagen$valoraciones[$i]
+ + + \ No newline at end of file From f809d2258ec6d012162c2661cbea0f99282bec8f Mon Sep 17 00:00:00 2001 From: Frank20060 <159519815+Frank20060@users.noreply.github.com> Date: Fri, 19 Sep 2025 16:30:39 +0000 Subject: [PATCH 14/34] ej2tablas --- practicas/pp2/ex1.php | 52 +++++++++++++++++++++++++++++ practicas/pp2/ex2.php | 72 +++++++++++++++++++++++++++++++++++++++++ practicas/pp2/index.php | 32 ++++++++++++++++++ 3 files changed, 156 insertions(+) create mode 100644 practicas/pp2/ex1.php create mode 100644 practicas/pp2/ex2.php create mode 100644 practicas/pp2/index.php diff --git a/practicas/pp2/ex1.php b/practicas/pp2/ex1.php new file mode 100644 index 00000000..eedcde36 --- /dev/null +++ b/practicas/pp2/ex1.php @@ -0,0 +1,52 @@ + + + + + + Ejercicio 1 + + + +

Numeros pares entre 50 y 500

+
+ $num
"; + + } + + ?> + + + \ No newline at end of file diff --git a/practicas/pp2/ex2.php b/practicas/pp2/ex2.php new file mode 100644 index 00000000..f6fa0184 --- /dev/null +++ b/practicas/pp2/ex2.php @@ -0,0 +1,72 @@ + + + + + + Ejercicio2 + + + +

Ejercicio 2

+

Tablas de multiplicar

+
+ + "; + for($j=1; $j<10; $j++){ + $resul = $i*$j; + echo "$i x $j = $resul"; + echo "
"; + + } + echo "
"; + + } + + ?> + + + + + + \ No newline at end of file diff --git a/practicas/pp2/index.php b/practicas/pp2/index.php new file mode 100644 index 00000000..bceddb67 --- /dev/null +++ b/practicas/pp2/index.php @@ -0,0 +1,32 @@ + + + + + + Portada pp2 + + + +

Practica 2

+

Ejercicio 1

+ +

Ejercicio 2

+ + + \ No newline at end of file From a703672a3b219a204387de6b6d8a762e6bdfadad Mon Sep 17 00:00:00 2001 From: Frank20060 <159519815+Frank20060@users.noreply.github.com> Date: Mon, 22 Sep 2025 14:01:58 +0000 Subject: [PATCH 15/34] pp2_finalizada --- practicas/pp2/ex1.php | 2 +- practicas/pp2/ex2.php | 4 +- practicas/pp2/ex3.php | 75 +++++++++++++++++++++++++++ practicas/pp2/ex4.php | 74 +++++++++++++++++++++++++++ practicas/pp2/ex5.php | 110 ++++++++++++++++++++++++++++++++++++++++ practicas/pp2/index.php | 11 +++- 6 files changed, 272 insertions(+), 4 deletions(-) create mode 100644 practicas/pp2/ex3.php create mode 100644 practicas/pp2/ex4.php create mode 100644 practicas/pp2/ex5.php diff --git a/practicas/pp2/ex1.php b/practicas/pp2/ex1.php index eedcde36..bad68f00 100644 --- a/practicas/pp2/ex1.php +++ b/practicas/pp2/ex1.php @@ -26,7 +26,7 @@ gap: 10px; width: 100%; height: fit-content; - border: 1px, dotted, brown; + border: 2px, dotted, brown; padding: 5px; font-size: 1.5em; diff --git a/practicas/pp2/ex2.php b/practicas/pp2/ex2.php index f6fa0184..864cdb42 100644 --- a/practicas/pp2/ex2.php +++ b/practicas/pp2/ex2.php @@ -29,9 +29,9 @@ display: flex; flex-wrap: wrap; gap: 10px; - width: 100%; + width: fit-content; height: fit-content; - border: 1px, dotted, brown; + border: 2px, dotted, brown; padding: 10px; gap: 20px; justify-content: center; diff --git a/practicas/pp2/ex3.php b/practicas/pp2/ex3.php new file mode 100644 index 00000000..c3e14c03 --- /dev/null +++ b/practicas/pp2/ex3.php @@ -0,0 +1,75 @@ + + + + + + Ejercicio 3 + + + + +

Numero aleatorio ¿PAR O INPAR?

+

Se genera un numero del 1 al 100 y determinamos si es par (borde rojo) o inpar (borde azul)

+ +

$numAleatorio

+ "; + }else{ + echo" +
+

$numAleatorio

+
"; + } + + + ?> + + \ No newline at end of file diff --git a/practicas/pp2/ex4.php b/practicas/pp2/ex4.php new file mode 100644 index 00000000..23f10956 --- /dev/null +++ b/practicas/pp2/ex4.php @@ -0,0 +1,74 @@ + + + + + + Ejercicio extr1 + + + +

Divisores de un numero random

+ Numero aleatorio: $numAleatorio +

Divisores del num $numAleatorio:

+
"; + for ($i = 1; $i <= $numAleatorio ; $i++){ + if(($numAleatorio % $i) == 0){ + echo "

$i

"; + $cont +=1; + }; + + }; + echo"
"; + if($cont == 2 || $cont == 1){ + + echo "

El numero $numAleatorio es un numero primo

"; + + }else{ + + echo "

El numero no $numAleatorio es un numero primo

"; + + }; + ?> + + \ No newline at end of file diff --git a/practicas/pp2/ex5.php b/practicas/pp2/ex5.php new file mode 100644 index 00000000..9cd56baa --- /dev/null +++ b/practicas/pp2/ex5.php @@ -0,0 +1,110 @@ + + + + + + Ejercicio extr2 + + + +

El Tiempo

+ +
+ + 25){ + + echo " +
+

$numAleatorio

+

Calor

+
+ "; + + }else if( $numAleatorio < 25 && $numAleatorio > 10){ + echo " +
+

$numAleatorio

+

Temperatura Suave

+
+ "; + }else{ + echo " +
+

$numAleatorio

+

Frio

+
+ "; + }; + + } + + ?> + +
+ + + \ No newline at end of file diff --git a/practicas/pp2/index.php b/practicas/pp2/index.php index bceddb67..f64385e3 100644 --- a/practicas/pp2/index.php +++ b/practicas/pp2/index.php @@ -20,13 +20,22 @@ color: brown; font-size: 40px; } + h2{ + color: brown; + font-size: 35px; + font-weight: normal; + + }

Practica 2

Ejercicio 1

-

Ejercicio 2

+

Ejercicio 3

+

Extras PP2

+

Ejercicio Extra 1

+

Ejercicio Extra 2

\ No newline at end of file From 3456920100855b4e7a34bb157b3e80045242e44e Mon Sep 17 00:00:00 2001 From: Frank20060 <159519815+Frank20060@users.noreply.github.com> Date: Mon, 22 Sep 2025 14:34:25 +0000 Subject: [PATCH 16/34] correcciones pp2 --- practicas/pp2/ex3.php | 32 +++++++++++--------------------- 1 file changed, 11 insertions(+), 21 deletions(-) diff --git a/practicas/pp2/ex3.php b/practicas/pp2/ex3.php index c3e14c03..779a58dd 100644 --- a/practicas/pp2/ex3.php +++ b/practicas/pp2/ex3.php @@ -21,50 +21,40 @@ color: brown; font-size: 40px; } - .par, .inpar{ - - width: 100px ; - height: 100px ; + .par, .impar{ + width: 100px; + height: 100px; justify-items: center; - align-items: center; - + align-items: center; } - .par p, .inpar p{ - + .par p, .impar p{ margin: 10px; font-size: 60px; - - } .par{ - - border: 10px, solid, red; - + border: 10px solid red; } - .inpar{ - - border: 10px, solid, blue; - + .impar{ + border: 10px solid blue; } -

Numero aleatorio ¿PAR O INPAR?

-

Se genera un numero del 1 al 100 y determinamos si es par (borde rojo) o inpar (borde azul)

+

Número aleatorio ¿PAR O IMPAR?

+

Se genera un número del 1 al 100 y determinamos si es par (borde rojo) o impar (borde azul)

$numAleatorio

"; }else{ echo" -
+

$numAleatorio

"; } From 629127bb2b46b1f5fb4afa3d05784457b619117f Mon Sep 17 00:00:00 2001 From: Frank20060 <159519815+Frank20060@users.noreply.github.com> Date: Mon, 22 Sep 2025 14:46:47 +0000 Subject: [PATCH 17/34] PP2B comenzando y retoques pp2 --- practicas/pp2/index.php | 10 +++++----- practicas/pp2b/ex1.php | 14 ++++++++++++++ practicas/pp2b/index.php | 41 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 60 insertions(+), 5 deletions(-) create mode 100644 practicas/pp2b/ex1.php create mode 100644 practicas/pp2b/index.php diff --git a/practicas/pp2/index.php b/practicas/pp2/index.php index f64385e3..d6852820 100644 --- a/practicas/pp2/index.php +++ b/practicas/pp2/index.php @@ -30,12 +30,12 @@

Practica 2

-

Ejercicio 1

-

Ejercicio 2

-

Ejercicio 3

+

Ejercicio 1 - Pares 50-500

+

Ejercicio 2 - Tablas Multiplicar

+

Ejercicio 3 - Num apeatorio Par o Impar

Extras PP2

-

Ejercicio Extra 1

-

Ejercicio Extra 2

+

Ejercicio Extra 1 - Numeros primos

+

Ejercicio Extra 2 - Temperaturas

\ No newline at end of file diff --git a/practicas/pp2b/ex1.php b/practicas/pp2b/ex1.php new file mode 100644 index 00000000..782dec25 --- /dev/null +++ b/practicas/pp2b/ex1.php @@ -0,0 +1,14 @@ + + + + + + Ejercicio 1 PP2b + + + + + + + + \ No newline at end of file diff --git a/practicas/pp2b/index.php b/practicas/pp2b/index.php new file mode 100644 index 00000000..ad5c7105 --- /dev/null +++ b/practicas/pp2b/index.php @@ -0,0 +1,41 @@ + + + + + + Practica 2b + + + + + + +

Practica 2b Extras

+

Ejercicio 1 - Lista de pares 50 - 500 clasificados

+

Ejercicio 2 - Analisis de valores aleatorios

+ + \ No newline at end of file From 74edb0c57bbb71e0b666e7b4e04d921ee4c84267 Mon Sep 17 00:00:00 2001 From: Frank20060 <159519815+Frank20060@users.noreply.github.com> Date: Mon, 22 Sep 2025 15:30:42 +0000 Subject: [PATCH 18/34] pp2b ej1 acabado --- practicas/pp2b/ex1.php | 128 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 127 insertions(+), 1 deletion(-) diff --git a/practicas/pp2b/ex1.php b/practicas/pp2b/ex1.php index 782dec25..2dbff8d3 100644 --- a/practicas/pp2b/ex1.php +++ b/practicas/pp2b/ex1.php @@ -4,11 +4,137 @@ Ejercicio 1 PP2b + + - +

Lista de pares 50 - 500 clasificados

+
+ + "; + echo "

De $i a " . ($i + 9) . "

"; + for ($j = $i; $j < $i + 10; $j +=2){ + $recuento++; + $sumaGrupal += $j; + $sumaTotal += $j; + + if ($j % 12 == 0) { + + echo "

$j

"; + + }else if ($j % 4 == 0) { + + echo "

$j

"; + + }else if ($j % 6 == 0) { + + echo "

$j

"; + + }else{ + + echo "

$j

"; + + } + + + } + echo "

Suma: $sumaGrupal

"; + echo "

Recuento: 5

"; + echo "
"; + + } + echo + "
+
+

Suma total elementos: $sumaTotal

+

Recuento total de elementos = $recuento

+ "; + + + ?> +
+ \ No newline at end of file From 588bb07230e015ca8544157719226e4430629d32 Mon Sep 17 00:00:00 2001 From: Frank20060 <159519815+Frank20060@users.noreply.github.com> Date: Fri, 26 Sep 2025 15:08:53 +0000 Subject: [PATCH 19/34] teoria 2- Array/URL --- practicas/teoria/teoria2-array/index.php | 16 ++++++ .../teoria2-array/listas/asociativas.php | 47 ++++++++++++++++ .../listas/multidimensionales.php | 53 +++++++++++++++++++ .../teoria/teoria2-array/listas/simples.php | 37 +++++++++++++ .../teoria2-array/parametrosURL/pag1.php | 13 +++++ .../teoria2-array/parametrosURL/pag2.php | 38 +++++++++++++ 6 files changed, 204 insertions(+) create mode 100644 practicas/teoria/teoria2-array/index.php create mode 100644 practicas/teoria/teoria2-array/listas/asociativas.php create mode 100644 practicas/teoria/teoria2-array/listas/multidimensionales.php create mode 100644 practicas/teoria/teoria2-array/listas/simples.php create mode 100644 practicas/teoria/teoria2-array/parametrosURL/pag1.php create mode 100644 practicas/teoria/teoria2-array/parametrosURL/pag2.php diff --git a/practicas/teoria/teoria2-array/index.php b/practicas/teoria/teoria2-array/index.php new file mode 100644 index 00000000..8d0854c3 --- /dev/null +++ b/practicas/teoria/teoria2-array/index.php @@ -0,0 +1,16 @@ + + + + + + Teoria2 - Array + + +

Teoria2 - Array

+ + + \ No newline at end of file diff --git a/practicas/teoria/teoria2-array/listas/asociativas.php b/practicas/teoria/teoria2-array/listas/asociativas.php new file mode 100644 index 00000000..32a32085 --- /dev/null +++ b/practicas/teoria/teoria2-array/listas/asociativas.php @@ -0,0 +1,47 @@ + + + + + + Listas asociativas + + +

Listas asociativas

+ "Frank", + "apellido" => "Villar", + "edad" => 19, + "curso" => "DAW2", + "Inteligente" => true + ]; + + echo $alumno; ///Con este no va porque el echo no sirve para este tipo de cosas + + var_dump($alumno); ///Este muestra demasiado + echo "
"; + print_r($alumno); //Este es el bueno si queremos mostrar el contenido del array pero muestra mucho + echo "
"; + echo $alumno["nombre"]; + echo $alumno["edad"]; + echo $alumno["Inteligente"]; + + //Añadir un elemento + + $alumno["email"] = "ejemplo@gmail.com"; + echo "
"; + echo $alumno["email"]; + + + foreach($alumno as $clave => $valor){ + + echo "

$clave: $valor

"; + + } + + + + ?> + + \ No newline at end of file diff --git a/practicas/teoria/teoria2-array/listas/multidimensionales.php b/practicas/teoria/teoria2-array/listas/multidimensionales.php new file mode 100644 index 00000000..9e9725c4 --- /dev/null +++ b/practicas/teoria/teoria2-array/listas/multidimensionales.php @@ -0,0 +1,53 @@ + + + + + + Listas multidimensionales + + +

Listas multidimensionales

+ + + "Frank", + "apellido" => "Villar", + "edad" => 19, + "curso" => "DAW2", + "Inteligente" => true + ], + [ + "nombre" => "Ana", + "apellido" => "Lopez", + "edad" => 20, + "curso" => "DAW1", + "Inteligente" => false + ], + [ + "nombre" => "Luis", + "apellido" => "Martinez", + "edad" => 21, + "curso" => "DAW2", + "Inteligente" => true + ] + ]; + + ///var_dump($alumnos) + + foreach($alumnos as $alumno){ + + echo "

{$alumno["nombre"]} {$alumno["apellido"]}

"; + echo "

Edad: {$alumno["edad"]}

"; + echo "

Curso: {$alumno["curso"]}

"; + + echo "
"; + + } + + ?> + + + \ No newline at end of file diff --git a/practicas/teoria/teoria2-array/listas/simples.php b/practicas/teoria/teoria2-array/listas/simples.php new file mode 100644 index 00000000..cff5d98b --- /dev/null +++ b/practicas/teoria/teoria2-array/listas/simples.php @@ -0,0 +1,37 @@ + + + + + + Listas Simples + + +

Listas Simples

+ "; + + //Bucle foreach + foreach($dias as $dia){ + + echo $dia; + + } + + + + ?> + + \ No newline at end of file diff --git a/practicas/teoria/teoria2-array/parametrosURL/pag1.php b/practicas/teoria/teoria2-array/parametrosURL/pag1.php new file mode 100644 index 00000000..c98ca8a2 --- /dev/null +++ b/practicas/teoria/teoria2-array/parametrosURL/pag1.php @@ -0,0 +1,13 @@ + + + + + + Pagina1 + + +

Pagina para enviar dados

+ + + + \ No newline at end of file diff --git a/practicas/teoria/teoria2-array/parametrosURL/pag2.php b/practicas/teoria/teoria2-array/parametrosURL/pag2.php new file mode 100644 index 00000000..4fc930dc --- /dev/null +++ b/practicas/teoria/teoria2-array/parametrosURL/pag2.php @@ -0,0 +1,38 @@ + + + + + + Pagina 2 + + +

Esto es la pagina 2 - Recibir datos

+ + "; + echo $_GET["edad"]; + + + ///isset, se usa para comprovar que existe un parametro con ese nombre + echo "

ISSET

"; + if(isset($_GET['nombre'])) { + + $n = $_GET['nombre']; ///Para trabajar mejor guardamos el contenido de lo que pasamos en la url en una variable + + echo "
El nombre es: " . $_GET['nombre']; + echo "
El nombre es: $n"; + } else { + echo "
No se ha recibido el nombre"; + + } + + + + ?> + + + \ No newline at end of file From c40d578e3aa4c797cbdc1b91640fdfdee289d8fd Mon Sep 17 00:00:00 2001 From: Frank20060 <159519815+Frank20060@users.noreply.github.com> Date: Fri, 26 Sep 2025 16:08:05 +0000 Subject: [PATCH 20/34] index peliculas hecho --- practicas/pp3-prliculas/estilo.css | 123 +++++++++++++++++++++++++ practicas/pp3-prliculas/index.php | 53 +++++++++++ practicas/pp3-prliculas/peliculas.php | 126 ++++++++++++++++++++++++++ 3 files changed, 302 insertions(+) create mode 100644 practicas/pp3-prliculas/estilo.css create mode 100644 practicas/pp3-prliculas/index.php create mode 100644 practicas/pp3-prliculas/peliculas.php diff --git a/practicas/pp3-prliculas/estilo.css b/practicas/pp3-prliculas/estilo.css new file mode 100644 index 00000000..e6a8ff08 --- /dev/null +++ b/practicas/pp3-prliculas/estilo.css @@ -0,0 +1,123 @@ +body{ + + background-color: rgb(180, 180, 180); + font-family: 'Lucida Sans', 'Lucida Sans Regular', 'Lucida Grande', 'Lucida Sans Unicode', Geneva, Verdana, sans-serif; + + + +} +header{ + + justify-items: center; + text-align: center; + color:white; + text-shadow: 0 8px 15px black; + font-size: 1.4em; + + +} + + + +/* Contenedor principal de la cartelera de películas */ +.cartelera { + display: flex; + flex-wrap: wrap; + gap: 20px; + justify-content: center; + padding: 20px; +} + +/* Tarjeta individual de cada película */ +.card { + position: relative; + width: 220px; + height: 330px; + border-radius: 10px; + overflow: hidden; + box-shadow: 0 8px 15px black; + cursor: pointer; + transition: transform 0.3s; +} + +/* Efecto de escala al pasar el ratón por la tarjeta */ +.card:hover { + transform: scale(1.05); +} + +/* Imagen de la película dentro de la tarjeta */ +.card img { + width: 100%; + height: 100%; + object-fit: cover; + display: block; +} + +/* Capa oscura que aparece al hacer hover sobre la tarjeta para mostrar información adicional */ +.overlay { + position: absolute; + justify-items: center; + align-items: center; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(20, 20, 20, 0.95); + color: white; + opacity: 0; + transition: opacity 0.3s ease-in-out; + + +} + +/* Hace visible la capa .overlay al hacer hover sobre la tarjeta */ +.card:hover .overlay { + opacity: 1; +} + +/* Título dentro de la capa overlay */ +.overlay h2 { + margin: 0 0 10px; + font-size: 18px; + color: #f1c40f; +} + +/* Contenedor de los horarios de la película */ +.horarios { + display: flex; + flex-wrap: wrap; + gap: 5px; + margin-bottom: 10px; +} + +/* Cada horario individual dentro del contenedor de horarios */ +.horarios div { + background: #333; + padding: 4px 8px; + border-radius: 4px; + font-size: 12px; +} + +/* Contenedor de los botones de acción (trailer, más info, etc.) */ +.botones { + display: flex; + gap: 10px; + flex-wrap: wrap; +} + +/* Estilos para los botones de acción */ +.botones button { + background-color: #f39c12; + border: none; + padding: 6px 10px; + border-radius: 4px; + color: white; + font-weight: bold; + cursor: pointer; + transition: background 0.3s; +} + +/* Efecto hover para los botones de acción */ +.botones button:hover { + background-color: #e67e22; +} diff --git a/practicas/pp3-prliculas/index.php b/practicas/pp3-prliculas/index.php new file mode 100644 index 00000000..cd77a8e9 --- /dev/null +++ b/practicas/pp3-prliculas/index.php @@ -0,0 +1,53 @@ + + + + + + CinesFrank + + + + +
+

CinesFrank

+

Cartelera

+
+
+
+ + Foto de cartel de la pelicula $peli[nombre] +
+

$peli[nombre]

+
+ "; + + foreach($peli['horarios'] as $horas){ + echo "
$horas
"; + } + + echo " +
+ +
+
+ "; + } + ?> + + + + +
+ + + + + \ No newline at end of file diff --git a/practicas/pp3-prliculas/peliculas.php b/practicas/pp3-prliculas/peliculas.php new file mode 100644 index 00000000..6f562f60 --- /dev/null +++ b/practicas/pp3-prliculas/peliculas.php @@ -0,0 +1,126 @@ + 'Spider-Man: No Way Home', + 'imagen' => 'https://static.wikia.nocookie.net/marvelcinematicuniverse/images/d/df/Spider-Man_No_Way_Home_Poster.png/revision/latest?cb=20211201150655&path-prefix=es', + 'horarios' => ['12:00', '15:00', '18:00', '21:00'], + 'sinopsis' => 'Peter Parker enfrenta desafíos cuando varios villanos de otras dimensiones llegan a su mundo.', + 'duracion' => '148 min', + 'director' => 'Jon Watts', + 'reparto' => ['Tom Holland', 'Zendaya', 'Benedict Cumberbatch'], + 'calificacion' => '+12', + 'genero' => 'Acción, Aventura, Ciencia Ficción', + 'trailer' => 'https://www.youtube.com/watch?v=JfVOs4VSpmA' + ], + [ + 'nombre' => 'Dune', + 'imagen' => 'https://static.bookscovers.es/imagenes/9788466/978846637696.JPG', + 'horarios' => ['11:30', '14:30', '17:30', '20:30'], + 'sinopsis' => 'En un futuro lejano, un joven heredero lucha por salvar a su familia y a su planeta de las fuerzas que lo amenazan.', + 'duracion' => '155 min', + 'director' => 'Denis Villeneuve', + 'reparto' => ['Timothée Chalamet', 'Oscar Isaac', 'Zendaya'], + 'calificacion' => '+12', + 'genero' => 'Ciencia Ficción, Aventura', + 'trailer' => 'https://www.youtube.com/watch?v=n9xhJrPXop4' + ], + [ + 'nombre' => 'Matrix Resurrections', + 'imagen' => 'https://play-lh.googleusercontent.com/H6Ioa-dJbdily7_7kbL6ZLPaZXpm8T5fOfTAwZYa7UXjtR30ekNWD2ZHl2HwI_WcT0E-D7ZZ4uxcJfuvwTDw', + 'horarios' => ['13:00', '16:00', '19:00', '22:00'], + 'sinopsis' => 'Neo vuelve a la Matrix y descubre un mundo donde las reglas de la realidad parecen haber cambiado.', + 'duracion' => '148 min', + 'director' => 'Lana Wachowski', + 'reparto' => ['Keanu Reeves', 'Carrie-Anne Moss', 'Yahya Abdul-Mateen II'], + 'calificacion' => '+16', + 'genero' => 'Ciencia Ficción, Acción', + 'trailer' => 'https://www.youtube.com/watch?v=fT1i0fL9OWg' + ], + [ + 'nombre' => 'No Time to Die', + 'imagen' => 'https://m.media-amazon.com/images/M/MV5BZGZiOGZhZDQtZmRkNy00ZmUzLTliMGEtZGU0NjExOGMxZDVkXkEyXkFqcGc@._V1_FMjpg_UX1000_.jpg', + 'horarios' => ['12:30', '15:30', '18:30', '21:30'], + 'sinopsis' => 'James Bond se enfrenta a un nuevo villano que posee una tecnología peligrosa.', + 'duracion' => '163 min', + 'director' => 'Cary Joji Fukunaga', + 'reparto' => ['Daniel Craig', 'Rami Malek', 'Lea Seydoux'], + 'calificacion' => '+16', + 'genero' => 'Acción, Espionaje, Suspense', + 'trailer' => 'https://www.youtube.com/watch?v=vw2FOYjCk5M' + ], + [ + 'nombre' => 'The Suicide Squad', + 'imagen' => 'https://m.media-amazon.com/images/M/MV5BMWU3Y2NlZmEtMjJjNS00ZWMxLWE1MzctYWYyMjMzMDdkNTE4XkEyXkFqcGc@._V1_FMjpg_UX1000_.jpg', + 'horarios' => ['14:00', '17:00', '20:00', '23:00'], + 'sinopsis' => 'Un grupo de supervillanos son reclutados por el gobierno para realizar una misión suicida.', + 'duracion' => '132 min', + 'director' => 'James Gunn', + 'reparto' => ['Margot Robbie', 'Idris Elba', 'John Cena'], + 'calificacion' => '+16', + 'genero' => 'Acción, Comedia, Superhéroes', + 'trailer' => 'https://www.youtube.com/watch?v=JuDLepNa7hw' + ], + [ + 'nombre' => 'A Quiet Place Part II', + 'imagen' => 'https://pics.filmaffinity.com/Un_lugar_tranquilo_2-979721999-large.jpg', + 'horarios' => ['13:30', '16:30', '19:30', '22:30'], + 'sinopsis' => 'La familia Abbott lucha por sobrevivir en un mundo post-apocalíptico donde criaturas cazan a los humanos mediante el sonido.', + 'duracion' => '97 min', + 'director' => 'John Krasinski', + 'reparto' => ['Emily Blunt', 'Cillian Murphy', 'John Krasinski'], + 'calificacion' => '+16', + 'genero' => 'Terror, Suspense', + 'trailer' => 'https://www.youtube.com/watch?v=WR7cc5t7tv8' + ], + [ + 'nombre' => 'Jungle Cruise', + 'imagen' => 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcS739ry5sRz1Z0cuaaFZEc5ciwWEHaFy_pSug&s', + 'horarios' => ['12:15', '15:15', '18:15', '21:15'], + 'sinopsis' => 'Un capitán de barco y una científica se embarcan en una peligrosa aventura por la jungla.', + 'duracion' => '127 min', + 'director' => 'Jaume Collet-Serra', + 'reparto' => ['Dwayne Johnson', 'Emily Blunt', 'Jack Whitehall'], + 'calificacion' => '+7', + 'genero' => 'Aventura, Comedia, Fantasía', + 'trailer' => 'https://www.youtube.com/watch?v=wnK-kvFtye4' + ], + [ + 'nombre' => 'The Green Knight', + 'imagen' => 'https://m.media-amazon.com/images/M/MV5BNjRjNmU1M2ItNDU4Ni00ZGY2LTlmNzItY2MxYmY3OTllZjMwXkEyXkFqcGc@._V1_FMjpg_UX1000_.jpg', + 'horarios' => ['13:45', '16:45', '19:45', '22:45'], + 'sinopsis' => 'Un caballero legendario se embarca en un peligroso viaje para enfrentarse al misterioso Caballero Verde.', + 'duracion' => '130 min', + 'director' => 'David Lowery', + 'reparto' => ['Dev Patel', 'Alicia Vikander', 'Joel Edgerton'], + 'calificacion' => '+16', + 'genero' => 'Aventura, Fantasía, Drama', + 'trailer' => 'https://www.youtube.com/watch?v=Myh6kH3Tc0Q' + ], + [ + 'nombre' => 'Luca', + 'imagen' => 'https://lumiere-a.akamaihd.net/v1/images/image_2ff75a5c.jpeg?region=0,0,540,810', + 'horarios' => ['10:00', '13:00', '16:00', '19:00'], + 'sinopsis' => 'Luca, un joven monstruo marino, vive un verano inolvidable en la costa italiana con su nuevo amigo.', + 'duracion' => '95 min', + 'director' => 'Enrico Casarosa', + 'reparto' => ['Jacob Tremblay', 'Jack Dylan Grazer', 'Emma Berman'], + 'calificacion' => '+7', + 'genero' => 'Animación, Aventura, Comedia', + 'trailer' => 'https://www.youtube.com/watch?v=YdW1By2pNFA' + ], + [ + 'nombre' => 'Black Widow', + 'imagen' => 'https://static.wikia.nocookie.net/marvelcinematicuniverse/images/e/e1/Black_Widow_-_Nuevo_P%C3%B3ster.png/revision/latest?cb=20210629192802&path-prefix=es', + 'horarios' => ['11:00', '14:00', '17:00', '20:00'], + 'sinopsis' => 'Natasha Romanoff debe enfrentarse a su pasado cuando una conspiración amenaza la vida de los Vengadores.', + 'duracion' => '134 min', + 'director' => 'Cate Shortland', + 'reparto' => ['Scarlett Johansson', 'Florence Pugh', 'David Harbour'], + 'calificacion' => '+12', + 'genero' => 'Acción, Aventura, Superhéroes', + 'trailer' => 'https://www.youtube.com/watch?v=ybji16uC6YQ' + ] +]; + +?> From 1f2044d243a42fe1593e4131f6d86de2a49b75c1 Mon Sep 17 00:00:00 2001 From: Frank20060 <159519815+Frank20060@users.noreply.github.com> Date: Fri, 26 Sep 2025 16:29:46 +0000 Subject: [PATCH 21/34] empezando detalles --- practicas/pp3-prliculas/detalles.php | 27 +++++++++++++++++++++++++++ practicas/pp3-prliculas/estilo.css | 9 ++++++--- practicas/pp3-prliculas/index.php | 8 +++++--- 3 files changed, 38 insertions(+), 6 deletions(-) create mode 100644 practicas/pp3-prliculas/detalles.php diff --git a/practicas/pp3-prliculas/detalles.php b/practicas/pp3-prliculas/detalles.php new file mode 100644 index 00000000..54388d2a --- /dev/null +++ b/practicas/pp3-prliculas/detalles.php @@ -0,0 +1,27 @@ + + + + + + Detalles CinesFrank + + + +

" . $peliculas[$i]['nombre'] . "

+
+ "; + foreach($peliculas[$i]['horarios'] as $horas){ + echo "
$horas
"; + } + echo " +
+ "; + + ?> + + \ No newline at end of file diff --git a/practicas/pp3-prliculas/estilo.css b/practicas/pp3-prliculas/estilo.css index e6a8ff08..521fe2cd 100644 --- a/practicas/pp3-prliculas/estilo.css +++ b/practicas/pp3-prliculas/estilo.css @@ -79,7 +79,8 @@ header{ .overlay h2 { margin: 0 0 10px; font-size: 18px; - color: #f1c40f; + color: rgb(180, 180, 180); + text-shadow: 0 8px 15px black; } /* Contenedor de los horarios de la película */ @@ -107,11 +108,12 @@ header{ /* Estilos para los botones de acción */ .botones button { - background-color: #f39c12; + background-color: rgb(180, 180, 180); border: none; padding: 6px 10px; border-radius: 4px; color: white; + text-shadow: 0 8px 15px black; font-weight: bold; cursor: pointer; transition: background 0.3s; @@ -119,5 +121,6 @@ header{ /* Efecto hover para los botones de acción */ .botones button:hover { - background-color: #e67e22; + background-color: #ffffff; + text-shadow: 0 8px 15px black; } diff --git a/practicas/pp3-prliculas/index.php b/practicas/pp3-prliculas/index.php index cd77a8e9..bcebc63a 100644 --- a/practicas/pp3-prliculas/index.php +++ b/practicas/pp3-prliculas/index.php @@ -16,7 +16,7 @@
@@ -33,13 +33,15 @@ echo "
"; + $i++; } + ?> From b1f77988d461f40081109fff2a296875b66f62ca Mon Sep 17 00:00:00 2001 From: Frank20060 <159519815+Frank20060@users.noreply.github.com> Date: Mon, 29 Sep 2025 12:40:25 +0000 Subject: [PATCH 22/34] cambio de nombre carpeta cartelera pelis --- practicas/{pp3-prliculas => pp3-peliculas}/detalles.php | 0 practicas/{pp3-prliculas => pp3-peliculas}/estilo.css | 0 practicas/{pp3-prliculas => pp3-peliculas}/index.php | 0 practicas/{pp3-prliculas => pp3-peliculas}/peliculas.php | 0 4 files changed, 0 insertions(+), 0 deletions(-) rename practicas/{pp3-prliculas => pp3-peliculas}/detalles.php (100%) rename practicas/{pp3-prliculas => pp3-peliculas}/estilo.css (100%) rename practicas/{pp3-prliculas => pp3-peliculas}/index.php (100%) rename practicas/{pp3-prliculas => pp3-peliculas}/peliculas.php (100%) diff --git a/practicas/pp3-prliculas/detalles.php b/practicas/pp3-peliculas/detalles.php similarity index 100% rename from practicas/pp3-prliculas/detalles.php rename to practicas/pp3-peliculas/detalles.php diff --git a/practicas/pp3-prliculas/estilo.css b/practicas/pp3-peliculas/estilo.css similarity index 100% rename from practicas/pp3-prliculas/estilo.css rename to practicas/pp3-peliculas/estilo.css diff --git a/practicas/pp3-prliculas/index.php b/practicas/pp3-peliculas/index.php similarity index 100% rename from practicas/pp3-prliculas/index.php rename to practicas/pp3-peliculas/index.php diff --git a/practicas/pp3-prliculas/peliculas.php b/practicas/pp3-peliculas/peliculas.php similarity index 100% rename from practicas/pp3-prliculas/peliculas.php rename to practicas/pp3-peliculas/peliculas.php From d872ee658e8a857f26ff2114c6ffbc7e4b94d3f3 Mon Sep 17 00:00:00 2001 From: Frank20060 <159519815+Frank20060@users.noreply.github.com> Date: Mon, 29 Sep 2025 14:40:28 +0000 Subject: [PATCH 23/34] cartelera peliculas acabado --- practicas/pp3-peliculas/detalles.php | 36 ++++++-- practicas/pp3-peliculas/estilo.css | 114 +++++++++++++++++++++++--- practicas/pp3-peliculas/peliculas.php | 20 ++--- practicas/pp3-peliculas/trailer.php | 23 ++++++ 4 files changed, 165 insertions(+), 28 deletions(-) create mode 100644 practicas/pp3-peliculas/trailer.php diff --git a/practicas/pp3-peliculas/detalles.php b/practicas/pp3-peliculas/detalles.php index 54388d2a..23ef912f 100644 --- a/practicas/pp3-peliculas/detalles.php +++ b/practicas/pp3-peliculas/detalles.php @@ -4,24 +4,50 @@ Detalles CinesFrank + - + + +
+ -

" . $peliculas[$i]['nombre'] . "

-
+
+ foto de cartel de la pelicula ". $peliculas[$i][ + +
+
+

" . $peliculas[$i]['nombre'] . "

+

" . $peliculas[$i]['sinopsis'] . "

+

Duración: " . $peliculas[$i]['duracion'] . "

+

Director: " . $peliculas[$i]['director'] . "

+

Reparto: "; + foreach($peliculas[$i]['reparto'] as $actor){ + + echo $actor . ", "; + + }; + echo "

"; + echo" +

Calificacion: " . $peliculas[$i]['calificacion'] . "

+

Género: " . $peliculas[$i]['genero'] . "

"; + + ///Horarios + echo "
"; foreach($peliculas[$i]['horarios'] as $horas){ - echo "
$horas
"; + echo "
$horas
"; } echo "
+ +
"; ?> +
\ No newline at end of file diff --git a/practicas/pp3-peliculas/estilo.css b/practicas/pp3-peliculas/estilo.css index 521fe2cd..d0e3fb62 100644 --- a/practicas/pp3-peliculas/estilo.css +++ b/practicas/pp3-peliculas/estilo.css @@ -10,16 +10,13 @@ header{ justify-items: center; text-align: center; - color:white; + color:rgb(0, 0, 0); text-shadow: 0 8px 15px black; font-size: 1.4em; } - - -/* Contenedor principal de la cartelera de películas */ .cartelera { display: flex; flex-wrap: wrap; @@ -28,7 +25,6 @@ header{ padding: 20px; } -/* Tarjeta individual de cada película */ .card { position: relative; width: 220px; @@ -75,7 +71,6 @@ header{ opacity: 1; } -/* Título dentro de la capa overlay */ .overlay h2 { margin: 0 0 10px; font-size: 18px; @@ -83,7 +78,6 @@ header{ text-shadow: 0 8px 15px black; } -/* Contenedor de los horarios de la película */ .horarios { display: flex; flex-wrap: wrap; @@ -91,7 +85,6 @@ header{ margin-bottom: 10px; } -/* Cada horario individual dentro del contenedor de horarios */ .horarios div { background: #333; padding: 4px 8px; @@ -99,7 +92,6 @@ header{ font-size: 12px; } -/* Contenedor de los botones de acción (trailer, más info, etc.) */ .botones { display: flex; gap: 10px; @@ -119,8 +111,104 @@ header{ transition: background 0.3s; } -/* Efecto hover para los botones de acción */ -.botones button:hover { - background-color: #ffffff; - text-shadow: 0 8px 15px black; + + + + + + +/* Detalles */ + +.mainDetalles{ + + display: flex; + flex-direction: row; + gap: 40px; + font-size: 1.4em; + +} +.mainDetalles h1{ + + text-shadow: 0 8px 15px rgb(88, 88, 88); + +} +.izquierda{ + + display: flex; + flex-direction: column; + gap: 20px; + +} +.izquierda img{ + + width: 500px; + border-radius: 4px; + box-shadow: 0 2px 5px black; + } +.izquierda button{ + + width: 100%; + height: 4em; + border: 1px solid black; + box-shadow: 0 2px 5px black; + border-radius: 4px; + background-color: #333; + color: white; + font-size: 20px; + font-weight: bold; + cursor: pointer; + transition: background 0.3s; +} +.horariosDetalles{ + + display: flex; + gap : 5px; + +} +.horariosDetalles div{ + + background-color: #6868687c; + padding: 10px; + border-radius: 5px; + box-shadow: 0 2px 5px black; + +} + + +/* Trailer */ + +.mainTrailer{ + + display: flex; + flex-direction: column; + align-items: center; + gap: 30px; + justify-content: center; + +} +.mainTrailer h1{ + + text-shadow: 0 8px 15px rgb(88, 88, 88); + +} +.mainTrailer iframe{ + + box-shadow: 0 2px 5px black; + +} +.derecha button, .mainTrailer button{ + margin-top: 20px; + width: 4em; + height: 4em; + border: 1px solid black; + box-shadow: 0 2px 5px black; + border-radius: 4px; + background-color: #333; + color: white; + font-size: 20px; + font-weight: bold; + cursor: pointer; + transition: background 0.3s; +} + diff --git a/practicas/pp3-peliculas/peliculas.php b/practicas/pp3-peliculas/peliculas.php index 6f562f60..955ca9a8 100644 --- a/practicas/pp3-peliculas/peliculas.php +++ b/practicas/pp3-peliculas/peliculas.php @@ -11,7 +11,7 @@ 'reparto' => ['Tom Holland', 'Zendaya', 'Benedict Cumberbatch'], 'calificacion' => '+12', 'genero' => 'Acción, Aventura, Ciencia Ficción', - 'trailer' => 'https://www.youtube.com/watch?v=JfVOs4VSpmA' + 'trailer' => 'https://www.youtube.com/embed/JfVOs4VSpmA?si=cHzfEGBc90BaWZ_i&autoplay=1' ], [ 'nombre' => 'Dune', @@ -23,7 +23,7 @@ 'reparto' => ['Timothée Chalamet', 'Oscar Isaac', 'Zendaya'], 'calificacion' => '+12', 'genero' => 'Ciencia Ficción, Aventura', - 'trailer' => 'https://www.youtube.com/watch?v=n9xhJrPXop4' + 'trailer' => 'https://www.youtube.com/embed/n9xhJrPXop4?si=jQwDoGjpqKimNRUw&autoplay=1' ], [ 'nombre' => 'Matrix Resurrections', @@ -35,7 +35,7 @@ 'reparto' => ['Keanu Reeves', 'Carrie-Anne Moss', 'Yahya Abdul-Mateen II'], 'calificacion' => '+16', 'genero' => 'Ciencia Ficción, Acción', - 'trailer' => 'https://www.youtube.com/watch?v=fT1i0fL9OWg' + 'trailer' => 'https://www.youtube.com/embed/IgYs_NDyaLs?si=B1TI6mjqBmVzxt-f&autoplay=1' ], [ 'nombre' => 'No Time to Die', @@ -47,7 +47,7 @@ 'reparto' => ['Daniel Craig', 'Rami Malek', 'Lea Seydoux'], 'calificacion' => '+16', 'genero' => 'Acción, Espionaje, Suspense', - 'trailer' => 'https://www.youtube.com/watch?v=vw2FOYjCk5M' + 'trailer' => 'https://www.youtube.com/embed/BIhNsAtPbPI?si=bAjzYgcEnAPybzja&autoplay=1' ], [ 'nombre' => 'The Suicide Squad', @@ -59,7 +59,7 @@ 'reparto' => ['Margot Robbie', 'Idris Elba', 'John Cena'], 'calificacion' => '+16', 'genero' => 'Acción, Comedia, Superhéroes', - 'trailer' => 'https://www.youtube.com/watch?v=JuDLepNa7hw' + 'trailer' => 'https://www.youtube.com/embed/CmRih_VtVAs?si=x1ISKFUpZX9a9W5m&autoplay=1' ], [ 'nombre' => 'A Quiet Place Part II', @@ -71,7 +71,7 @@ 'reparto' => ['Emily Blunt', 'Cillian Murphy', 'John Krasinski'], 'calificacion' => '+16', 'genero' => 'Terror, Suspense', - 'trailer' => 'https://www.youtube.com/watch?v=WR7cc5t7tv8' + 'trailer' => 'https://www.youtube.com/embed/BpdDN9d9Jio?si=uqo7lshFFjHLb9db&autoplay=1' ], [ 'nombre' => 'Jungle Cruise', @@ -83,7 +83,7 @@ 'reparto' => ['Dwayne Johnson', 'Emily Blunt', 'Jack Whitehall'], 'calificacion' => '+7', 'genero' => 'Aventura, Comedia, Fantasía', - 'trailer' => 'https://www.youtube.com/watch?v=wnK-kvFtye4' + 'trailer' => 'https://www.youtube.com/embed/k3zJZXbAPpE?si=m0Nr36u4VOulvJ3Q&autoplay=1' ], [ 'nombre' => 'The Green Knight', @@ -95,7 +95,7 @@ 'reparto' => ['Dev Patel', 'Alicia Vikander', 'Joel Edgerton'], 'calificacion' => '+16', 'genero' => 'Aventura, Fantasía, Drama', - 'trailer' => 'https://www.youtube.com/watch?v=Myh6kH3Tc0Q' + 'trailer' => 'https://www.youtube.com/embed/sS6ksY8xWCY?si=YnRNh9kHY6p3J20j&autoplay=1' ], [ 'nombre' => 'Luca', @@ -107,7 +107,7 @@ 'reparto' => ['Jacob Tremblay', 'Jack Dylan Grazer', 'Emma Berman'], 'calificacion' => '+7', 'genero' => 'Animación, Aventura, Comedia', - 'trailer' => 'https://www.youtube.com/watch?v=YdW1By2pNFA' + 'trailer' => 'https://www.youtube.com/embed/kw50vQA1S-o?si=kbmi54z9K_5F-Biy&autoplay=1' ], [ 'nombre' => 'Black Widow', @@ -119,7 +119,7 @@ 'reparto' => ['Scarlett Johansson', 'Florence Pugh', 'David Harbour'], 'calificacion' => '+12', 'genero' => 'Acción, Aventura, Superhéroes', - 'trailer' => 'https://www.youtube.com/watch?v=ybji16uC6YQ' + 'trailer' => 'https://www.youtube.com/embed/ybji16u608U?si=hsFE1ltTdcG0fJgU&autoplay=1' ] ]; diff --git a/practicas/pp3-peliculas/trailer.php b/practicas/pp3-peliculas/trailer.php new file mode 100644 index 00000000..69deb8b1 --- /dev/null +++ b/practicas/pp3-peliculas/trailer.php @@ -0,0 +1,23 @@ + + + + + + + Trailer + + + +
+

Trailer

+
+
+ "; + ?> + +
+ + \ No newline at end of file From b7388afb66d813d40cb84fcf0ef7e3ab36590c92 Mon Sep 17 00:00:00 2001 From: Frank20060 <159519815+Frank20060@users.noreply.github.com> Date: Mon, 29 Sep 2025 14:56:06 +0000 Subject: [PATCH 24/34] estilo cartelera --- practicas/pp3-peliculas/detalles.php | 10 ++++----- practicas/pp3-peliculas/estilo.css | 31 ++++++++++++++++++++-------- practicas/pp3-peliculas/trailer.php | 2 +- 3 files changed, 28 insertions(+), 15 deletions(-) diff --git a/practicas/pp3-peliculas/detalles.php b/practicas/pp3-peliculas/detalles.php index 23ef912f..1a8f8976 100644 --- a/practicas/pp3-peliculas/detalles.php +++ b/practicas/pp3-peliculas/detalles.php @@ -22,9 +22,9 @@

" . $peliculas[$i]['nombre'] . "

" . $peliculas[$i]['sinopsis'] . "

-

Duración: " . $peliculas[$i]['duracion'] . "

-

Director: " . $peliculas[$i]['director'] . "

-

Reparto: "; +

Duración: " . $peliculas[$i]['duracion'] . "

+

Director: " . $peliculas[$i]['director'] . "

+

Reparto: "; foreach($peliculas[$i]['reparto'] as $actor){ echo $actor . ", "; @@ -32,8 +32,8 @@ }; echo "

"; echo" -

Calificacion: " . $peliculas[$i]['calificacion'] . "

-

Género: " . $peliculas[$i]['genero'] . "

+

Calificacion: " . $peliculas[$i]['calificacion'] . "

+

Género: " . $peliculas[$i]['genero'] . "

"; ///Horarios diff --git a/practicas/pp3-peliculas/estilo.css b/practicas/pp3-peliculas/estilo.css index d0e3fb62..ce1f7941 100644 --- a/practicas/pp3-peliculas/estilo.css +++ b/practicas/pp3-peliculas/estilo.css @@ -1,6 +1,6 @@ body{ - background-color: rgb(180, 180, 180); + background-color:#121212; font-family: 'Lucida Sans', 'Lucida Sans Regular', 'Lucida Grande', 'Lucida Sans Unicode', Geneva, Verdana, sans-serif; @@ -10,8 +10,8 @@ header{ justify-items: center; text-align: center; - color:rgb(0, 0, 0); - text-shadow: 0 8px 15px black; + color:#FFFFFF; + text-shadow: 0 2px 5px #E50914; font-size: 1.4em; @@ -31,7 +31,7 @@ header{ height: 330px; border-radius: 10px; overflow: hidden; - box-shadow: 0 8px 15px black; + box-shadow: 0 2px 5px #E50914; cursor: pointer; transition: transform 0.3s; } @@ -74,7 +74,7 @@ header{ .overlay h2 { margin: 0 0 10px; font-size: 18px; - color: rgb(180, 180, 180); + color: #E50914; text-shadow: 0 8px 15px black; } @@ -100,7 +100,7 @@ header{ /* Estilos para los botones de acción */ .botones button { - background-color: rgb(180, 180, 180); + background-color: #E50914; border: none; padding: 6px 10px; border-radius: 4px; @@ -125,11 +125,18 @@ header{ flex-direction: row; gap: 40px; font-size: 1.4em; + color: #FFFFFF; } .mainDetalles h1{ - text-shadow: 0 8px 15px rgb(88, 88, 88); + text-shadow: 0 2px 5px #E50914; + +} +.mainDetalles span{ + + color: #E50914; + font-weight: bold; } .izquierda{ @@ -143,7 +150,7 @@ header{ width: 500px; border-radius: 4px; - box-shadow: 0 2px 5px black; + box-shadow: 0 2px 5px rgb(44, 44, 44); } .izquierda button{ @@ -151,7 +158,7 @@ header{ width: 100%; height: 4em; border: 1px solid black; - box-shadow: 0 2px 5px black; + box-shadow: 0 2px 5px black; border-radius: 4px; background-color: #333; color: white; @@ -160,6 +167,9 @@ header{ cursor: pointer; transition: background 0.3s; } +.mainDetalles button:hover{ + box-shadow: 0 2px 5px #E50914; +} .horariosDetalles{ display: flex; @@ -211,4 +221,7 @@ header{ cursor: pointer; transition: background 0.3s; } +.mainTrailer button:hover{ + box-shadow: 0 2px 5px #E50914; +} diff --git a/practicas/pp3-peliculas/trailer.php b/practicas/pp3-peliculas/trailer.php index 69deb8b1..eb67fea6 100644 --- a/practicas/pp3-peliculas/trailer.php +++ b/practicas/pp3-peliculas/trailer.php @@ -17,7 +17,7 @@ $i = $_GET["id"]; echo ""; ?> - + \ No newline at end of file From 0eddfb0e9bcd32056bdfacdfbc56a2832c133fb4 Mon Sep 17 00:00:00 2001 From: Frank20060 <159519815+Frank20060@users.noreply.github.com> Date: Fri, 3 Oct 2025 14:35:40 +0000 Subject: [PATCH 25/34] teoria3-funciones/formularios --- .../teoria/teoria3-formularios/index.php | 69 +++++++++++++++++++ practicas/teoria/teoria3-funciones/index.php | 55 +++++++++++++++ 2 files changed, 124 insertions(+) create mode 100644 practicas/teoria/teoria3-formularios/index.php create mode 100644 practicas/teoria/teoria3-funciones/index.php diff --git a/practicas/teoria/teoria3-formularios/index.php b/practicas/teoria/teoria3-formularios/index.php new file mode 100644 index 00000000..e2be82bf --- /dev/null +++ b/practicas/teoria/teoria3-formularios/index.php @@ -0,0 +1,69 @@ + + + + + + Teoria3 - Formularios + + +

Teoria 3 - Formularios

+ +
+ + + + + +
+ + '; + echo $_GET['edad']; + echo '
';*/ + + ///Ahora con POST + echo $_POST['nombre']; + echo '
'; + echo $_POST['edad']; + echo '
'; + + + ?> + + +

LogIn

+
+ + + + + +
+ 'Frank', 'contrasena' => '1234'], + ['nombre' => 'Ana', 'contrasena' => 'abcd'], + ['nombre' => 'Luis', 'contrasena' => '5678'], + ]; + $nombre = $_POST['nombre']; + $contrasena = $_POST['contrasena']; + if(isset($nombre) && isset($contrasena)){ + $encontrado = false; + foreach($datos as $usuario){ + if($usuario['nombre'] === $nombre && $usuario['contrasena'] === $contrasena){ + $encontrado = true; + + } + } + if($encontrado){ + echo "

Bienvenido, $nombre

"; + } else { + echo "

Usuario o contraseña incorrectos

"; + } + } + ?> + + + \ No newline at end of file diff --git a/practicas/teoria/teoria3-funciones/index.php b/practicas/teoria/teoria3-funciones/index.php new file mode 100644 index 00000000..4397ddb1 --- /dev/null +++ b/practicas/teoria/teoria3-funciones/index.php @@ -0,0 +1,55 @@ + + + + + + Document + + + +

Teoria 3 - Funciones

+ + '; + + function calcularTotal($precio, $cantidad, $impuesto){ + + $subtotal = $precio * $cantidad; + $total = $subtotal + ($subtotal * $impuesto / 100); + return $total; + + } + echo calcularTotal(100, 2, 21); + + echo '
'; + ///Funiones array + + $palabras = ['Hola', 'mundo', 'desde','php']; + $palabras_implode = implode(", " , $palabras); + echo $palabras_implode; + echo '
'; + + $cadena = "hola,que,tal,estas"; + $palabras_explode = explode(",", $cadena); + print_r($palabras_explode); + + + + + + + + ?> + + + \ No newline at end of file From 2cd5b1fa946a6879a95328023f4dc09f1269565f Mon Sep 17 00:00:00 2001 From: Frank20060 <159519815+Frank20060@users.noreply.github.com> Date: Fri, 3 Oct 2025 15:37:25 +0000 Subject: [PATCH 26/34] PracticaMercadona-Finalizada --- practicas/pp4-mercadona/data/productos.php | 34 ++++ practicas/pp4-mercadona/estilo.css | 167 ++++++++++++++++++ practicas/pp4-mercadona/includes/footer.php | 3 + .../pp4-mercadona/includes/funciones.php | 39 ++++ practicas/pp4-mercadona/includes/header.php | 12 ++ practicas/pp4-mercadona/index.php | 22 +++ practicas/pp4-mercadona/inicio.php | 35 ++++ .../teoria => teoria}/teoria1/intro.php | 0 .../teoria => teoria}/teoria2-array/index.php | 0 .../teoria2-array/listas/asociativas.php | 0 .../listas/multidimensionales.php | 0 .../teoria2-array/listas/simples.php | 0 .../teoria2-array/parametrosURL/pag1.php | 0 .../teoria2-array/parametrosURL/pag2.php | 0 .../teoria3-formularios/index.php | 0 .../teoria3-funciones/index.php | 0 16 files changed, 312 insertions(+) create mode 100644 practicas/pp4-mercadona/data/productos.php create mode 100644 practicas/pp4-mercadona/estilo.css create mode 100644 practicas/pp4-mercadona/includes/footer.php create mode 100644 practicas/pp4-mercadona/includes/funciones.php create mode 100644 practicas/pp4-mercadona/includes/header.php create mode 100644 practicas/pp4-mercadona/index.php create mode 100644 practicas/pp4-mercadona/inicio.php rename {practicas/teoria => teoria}/teoria1/intro.php (100%) rename {practicas/teoria => teoria}/teoria2-array/index.php (100%) rename {practicas/teoria => teoria}/teoria2-array/listas/asociativas.php (100%) rename {practicas/teoria => teoria}/teoria2-array/listas/multidimensionales.php (100%) rename {practicas/teoria => teoria}/teoria2-array/listas/simples.php (100%) rename {practicas/teoria => teoria}/teoria2-array/parametrosURL/pag1.php (100%) rename {practicas/teoria => teoria}/teoria2-array/parametrosURL/pag2.php (100%) rename {practicas/teoria => teoria}/teoria3-formularios/index.php (100%) rename {practicas/teoria => teoria}/teoria3-funciones/index.php (100%) diff --git a/practicas/pp4-mercadona/data/productos.php b/practicas/pp4-mercadona/data/productos.php new file mode 100644 index 00000000..f745140a --- /dev/null +++ b/practicas/pp4-mercadona/data/productos.php @@ -0,0 +1,34 @@ + 'Manzana', + 'precio' => 1.20, + 'disponible' => true, + 'imagen' => 'https://images.unsplash.com/photo-1567306226416-28f0efdc88ce?auto=format&fit=crop&w=400&q=80', + ], + [ + 'nombre' => 'Leche', + 'precio' => 0.95, + 'disponible' => true, + 'imagen' => 'https://cdn.pixabay.com/photo/2017/08/08/08/55/merry-christmas-2610745_1280.jpg', + ], + [ + 'nombre' => 'Pan', + 'precio' => 1.10, + 'disponible' => false, + 'imagen' => 'https://cdn.pixabay.com/photo/2022/09/10/17/27/loaf-7445434_1280.jpg', + ], + [ + 'nombre' => 'Tomate', + 'precio' => 1.50, + 'disponible' => true, + 'imagen' => 'https://cdn.pixabay.com/photo/2017/05/03/20/49/tomato-2282101_1280.jpg', + ], + [ + 'nombre' => 'Huevos', + 'precio' => 2.30, + 'disponible' => false, + 'imagen' => 'https://cdn.pixabay.com/photo/2017/09/13/23/21/egg-2747445_1280.png', + ] +]; +?> diff --git a/practicas/pp4-mercadona/estilo.css b/practicas/pp4-mercadona/estilo.css new file mode 100644 index 00000000..0a2439c1 --- /dev/null +++ b/practicas/pp4-mercadona/estilo.css @@ -0,0 +1,167 @@ +/* FranKSupermercados - Estilo principal */ + +:root { + --verde-oscuro: #22543d; + --verde-suave: #2f855a; + --blanco: #f9f9f9; + --gris-claro: #e2e8f0; + --texto: #222; +} + +body { + background: var(--blanco); + color: var(--texto); + font-family: 'Segoe UI', Arial, sans-serif; + margin: 0; + padding: 0; +} + +h1 { + color: var(--verde-oscuro); + text-align: center; + margin-top: 2rem; + letter-spacing: 2px; +} + +form { + background: var(--gris-claro); + border-radius: 10px; + box-shadow: 0 2px 8px rgba(34,84,61,0.08); + max-width: 400px; + margin: 2rem auto; + padding: 2rem; + display: flex; + flex-direction: column; + gap: 1.2rem; +} + +input { + padding: 0.7em; + border: 1px solid var(--verde-suave); + border-radius: 6px; + background: var(--blanco); + color: var(--texto); + font-size: 1em; + transition: border 0.2s; +} +input:focus { + border-color: var(--verde-oscuro); + outline: none; +} + +button { + background: var(--verde-oscuro); + color: var(--blanco); + border: none; + border-radius: 6px; + padding: 0.8em 1.2em; + font-size: 1em; + cursor: pointer; + transition: background 0.2s; +} +button:hover { + background: var(--verde-suave); +} + +/* Estilo para el mensaje de bienvenida */ +.header{ + margin: 0px auto; + max-width: 100vw; + background: var(--verde-suave); + color: var(--blanco); + display: flex; + align-items: center; + gap: 1em; + padding: 1em; + box-shadow: 0 2px 8px rgba(34,84,61,0.10); +} +.header img { + width: 60px; + height: 60px; + border-radius: 50%; + object-fit: cover; + border: 2px solid var(--blanco); +} + +.footer-derechos { + background: var(--verde-oscuro); + color: var(--blanco); + text-align: center; + padding: 1em 0; + position: fixed; + left: 0; + bottom: 0; + width: 100vw; + z-index: 100; + box-shadow: 0 -2px 8px rgba(34,84,61,0.10); +} + +.footer-texto { + font-size: 0.95em; + letter-spacing: 1px; + margin: 0; + opacity: 0.85; +} +/*Informacion de contacto*/ + + +.info-contacto{ + + background: var(--blanco); + color: var(--texto); + text-align: center; + padding: 1em 0; + width: 100vw; + display: flex; + flex-direction: row; + padding: 40px; + gap: 1em; + align-items: center; + +} +.info-contacto img{ + width: 10%; + height: 10%; + border-radius: 25%; + object-fit: cover; + border: 2px solid var(--verde-oscuro); + +} + +/*Tabla */ + +table { + width: 90%; + margin: 2rem auto; + border-collapse: collapse; + box-shadow: 0 2px 8px rgba(34,84,61,0.08); + border-collapse: collapse; + border: 2px solid var(--gris-claro); + margin-bottom: 200px; +} +th, td { + padding: 1em; + text-align: left; + border-bottom: 1px solid var(--gris-claro); + border: 2px solid var(--gris-claro); +} +th { + background-color: var(--verde-oscuro); + color: var(--blanco); +} +table img { + width: 50px; + height: 50px; + border-radius: 8px; + object-fit: cover; +} +.disponible{ + + background-color: rgba(172, 255, 172, 0.897); + +} +.no-disponible{ + + background-color: rgba(255, 152, 152, 0.897); + +} \ No newline at end of file diff --git a/practicas/pp4-mercadona/includes/footer.php b/practicas/pp4-mercadona/includes/footer.php new file mode 100644 index 00000000..c1ae5f1f --- /dev/null +++ b/practicas/pp4-mercadona/includes/footer.php @@ -0,0 +1,3 @@ +
+ +
diff --git a/practicas/pp4-mercadona/includes/funciones.php b/practicas/pp4-mercadona/includes/funciones.php new file mode 100644 index 00000000..20580d54 --- /dev/null +++ b/practicas/pp4-mercadona/includes/funciones.php @@ -0,0 +1,39 @@ +'; + $tabla .= 'ImagenNombrePrecio (€)Disponibilidad'; + + foreach($productos as $producto){ + $disponibilidad = $producto['disponible'] ? 'Disponible' : 'No disponible'; + $claseDisponibilidad = $producto['disponible'] ? 'disponible' : 'no-disponible'; + + $tabla .= ''; + $tabla .= '' . $producto['nombre'] . ''; + $tabla .= '' . $producto['nombre'] . ''; + $tabla .= '' . $producto['precio'] . ''; + $tabla .= '' . $disponibilidad . ''; + $tabla .= ''; + } + + $tabla .= ''; + + return $tabla; + + } + + function muestraInfoContacto($nombre, $telefono, $foto){ + + $info = '
'; + $info .= 'Foto de perfil'; + $info .= '

Nombre: ' . $nombre . '

'; + $info .= '

Teléfono: ' . $telefono . '

'; + $info .= '
'; + return $info; + + } + +?> \ No newline at end of file diff --git a/practicas/pp4-mercadona/includes/header.php b/practicas/pp4-mercadona/includes/header.php new file mode 100644 index 00000000..cc77aef1 --- /dev/null +++ b/practicas/pp4-mercadona/includes/header.php @@ -0,0 +1,12 @@ +'; + echo 'Foto de perfil'; + echo 'Bienvenido, ' . $nombre . '!'; + echo '
'; +} +?> diff --git a/practicas/pp4-mercadona/index.php b/practicas/pp4-mercadona/index.php new file mode 100644 index 00000000..b91f4f9c --- /dev/null +++ b/practicas/pp4-mercadona/index.php @@ -0,0 +1,22 @@ + + + + + + FranKSupermercados + + + +

FranKSupermercados

+
+ + + + + + + +
+ + + \ No newline at end of file diff --git a/practicas/pp4-mercadona/inicio.php b/practicas/pp4-mercadona/inicio.php new file mode 100644 index 00000000..5a449b30 --- /dev/null +++ b/practicas/pp4-mercadona/inicio.php @@ -0,0 +1,35 @@ + + + + + + FranKSupermercados + + + + + +

FranKSupermercados

+ + + + + + + + \ No newline at end of file diff --git a/practicas/teoria/teoria1/intro.php b/teoria/teoria1/intro.php similarity index 100% rename from practicas/teoria/teoria1/intro.php rename to teoria/teoria1/intro.php diff --git a/practicas/teoria/teoria2-array/index.php b/teoria/teoria2-array/index.php similarity index 100% rename from practicas/teoria/teoria2-array/index.php rename to teoria/teoria2-array/index.php diff --git a/practicas/teoria/teoria2-array/listas/asociativas.php b/teoria/teoria2-array/listas/asociativas.php similarity index 100% rename from practicas/teoria/teoria2-array/listas/asociativas.php rename to teoria/teoria2-array/listas/asociativas.php diff --git a/practicas/teoria/teoria2-array/listas/multidimensionales.php b/teoria/teoria2-array/listas/multidimensionales.php similarity index 100% rename from practicas/teoria/teoria2-array/listas/multidimensionales.php rename to teoria/teoria2-array/listas/multidimensionales.php diff --git a/practicas/teoria/teoria2-array/listas/simples.php b/teoria/teoria2-array/listas/simples.php similarity index 100% rename from practicas/teoria/teoria2-array/listas/simples.php rename to teoria/teoria2-array/listas/simples.php diff --git a/practicas/teoria/teoria2-array/parametrosURL/pag1.php b/teoria/teoria2-array/parametrosURL/pag1.php similarity index 100% rename from practicas/teoria/teoria2-array/parametrosURL/pag1.php rename to teoria/teoria2-array/parametrosURL/pag1.php diff --git a/practicas/teoria/teoria2-array/parametrosURL/pag2.php b/teoria/teoria2-array/parametrosURL/pag2.php similarity index 100% rename from practicas/teoria/teoria2-array/parametrosURL/pag2.php rename to teoria/teoria2-array/parametrosURL/pag2.php diff --git a/practicas/teoria/teoria3-formularios/index.php b/teoria/teoria3-formularios/index.php similarity index 100% rename from practicas/teoria/teoria3-formularios/index.php rename to teoria/teoria3-formularios/index.php diff --git a/practicas/teoria/teoria3-funciones/index.php b/teoria/teoria3-funciones/index.php similarity index 100% rename from practicas/teoria/teoria3-funciones/index.php rename to teoria/teoria3-funciones/index.php From 412685f3499271bbc001087fb259c5c9f3a97798 Mon Sep 17 00:00:00 2001 From: Frank20060 <159519815+Frank20060@users.noreply.github.com> Date: Fri, 17 Oct 2025 16:31:47 +0000 Subject: [PATCH 27/34] quedan las cards --- practicas/pp5-logInSesion/header.php | 25 ++++++++++ practicas/pp5-logInSesion/home.php | 65 +++++++++++++++++++++++++ practicas/pp5-logInSesion/index.php | 34 +++++++++++++ practicas/pp5-logInSesion/logout.php | 17 +++++++ practicas/pp5-logInSesion/personaje.php | 44 +++++++++++++++++ practicas/pp5-logInSesion/usuarios.php | 21 ++++++++ teoria/teoria4-sesions/index.php | 15 ++++++ teoria/teoria4-sesions/logOut.php | 16 ++++++ teoria/teoria4-sesions/pagina2.php | 13 +++++ 9 files changed, 250 insertions(+) create mode 100644 practicas/pp5-logInSesion/header.php create mode 100644 practicas/pp5-logInSesion/home.php create mode 100644 practicas/pp5-logInSesion/index.php create mode 100644 practicas/pp5-logInSesion/logout.php create mode 100644 practicas/pp5-logInSesion/personaje.php create mode 100644 practicas/pp5-logInSesion/usuarios.php create mode 100644 teoria/teoria4-sesions/index.php create mode 100644 teoria/teoria4-sesions/logOut.php create mode 100644 teoria/teoria4-sesions/pagina2.php diff --git a/practicas/pp5-logInSesion/header.php b/practicas/pp5-logInSesion/header.php new file mode 100644 index 00000000..187c9a8f --- /dev/null +++ b/practicas/pp5-logInSesion/header.php @@ -0,0 +1,25 @@ +'; + echo '
'; + echo '

' . $bienvenida .'

'; + echo ''; + + +}else{ +echo '
'; +echo '
'; +echo '

iniciar Sesion

'; +} +?> \ No newline at end of file diff --git a/practicas/pp5-logInSesion/home.php b/practicas/pp5-logInSesion/home.php new file mode 100644 index 00000000..70f372bc --- /dev/null +++ b/practicas/pp5-logInSesion/home.php @@ -0,0 +1,65 @@ + $nombre, + 'habilidadPersonaje' => $habil, + 'urlImgPersonaje' => $img, + ]; + $_SESSION['personajes'][] = $nuevo; + + header('Location: home.php'); //pa que no se vuelva a enviar dos vezes si F5 +} +?> + + + + + + Home + + + + '. $userName .''; + + + + ?> +
+

Introduce un personaje que te guste

+ + + + + +
+ + Ver personajes + + + \ No newline at end of file diff --git a/practicas/pp5-logInSesion/index.php b/practicas/pp5-logInSesion/index.php new file mode 100644 index 00000000..b76ff48b --- /dev/null +++ b/practicas/pp5-logInSesion/index.php @@ -0,0 +1,34 @@ + + + + + + + + Log In + + +
+ + +
+ + + +
+
+ + + \ No newline at end of file diff --git a/practicas/pp5-logInSesion/logout.php b/practicas/pp5-logInSesion/logout.php new file mode 100644 index 00000000..6ff92d35 --- /dev/null +++ b/practicas/pp5-logInSesion/logout.php @@ -0,0 +1,17 @@ + + + + + + + Personaje + + + +

Personajes

+ '; + echo '

' . $nombre . '

'; + if ($img !== '') { + echo '' . $nombre . ''; + } + if ($habil !== '') { + echo '

Habilidad: ' . $habil . '

'; + } + echo ''; + } + } else { + echo '

No hay personajes.

'; + } + + ?> + + \ No newline at end of file diff --git a/practicas/pp5-logInSesion/usuarios.php b/practicas/pp5-logInSesion/usuarios.php new file mode 100644 index 00000000..a436ce4b --- /dev/null +++ b/practicas/pp5-logInSesion/usuarios.php @@ -0,0 +1,21 @@ + 'ana', + 'password' => 'password123', + ], + [ + 'username' => 'frank', + 'password' => 'frank', + ], + [ + 'username' => 'juan', + 'password' => 'juanpass', + ], + [ + 'username' => 'admin', + 'password' => 'adminsecret', + ], +]; + diff --git a/teoria/teoria4-sesions/index.php b/teoria/teoria4-sesions/index.php new file mode 100644 index 00000000..7bf44652 --- /dev/null +++ b/teoria/teoria4-sesions/index.php @@ -0,0 +1,15 @@ +"; +echo "Usuario: ".$_SESSION['user']."
"; +echo "Rol: ".$_SESSION['rol']."
"; +echo "

"; +echo 'Ir a la página 2

'; +echo 'Cerrar sesión
'; +?> \ No newline at end of file diff --git a/teoria/teoria4-sesions/logOut.php b/teoria/teoria4-sesions/logOut.php new file mode 100644 index 00000000..464474ce --- /dev/null +++ b/teoria/teoria4-sesions/logOut.php @@ -0,0 +1,16 @@ +"; +echo "

"; +echo "Hasta luego, " . $nombre . "!
"; + + + +?> \ No newline at end of file diff --git a/teoria/teoria4-sesions/pagina2.php b/teoria/teoria4-sesions/pagina2.php new file mode 100644 index 00000000..bf8488e9 --- /dev/null +++ b/teoria/teoria4-sesions/pagina2.php @@ -0,0 +1,13 @@ +"; + +echo "Usuario: ". $_SESSION['user'] ."
"; +echo "Rol: ". $_SESSION['rol'] ."
"; +echo "

"; +echo 'Volver a la página inicial

'; +echo 'Cerrar sesión

'; + +?> \ No newline at end of file From 5da9caa7728dad3585e8e16eff6b16528425f1ef Mon Sep 17 00:00:00 2001 From: Frank20060 <159519815+Frank20060@users.noreply.github.com> Date: Sat, 18 Oct 2025 13:53:05 +0000 Subject: [PATCH 28/34] acabao --- practicas/pp5-logInSesion/home.php | 5 +---- practicas/pp5-logInSesion/personaje.php | 6 +++--- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/practicas/pp5-logInSesion/home.php b/practicas/pp5-logInSesion/home.php index 70f372bc..b1613b81 100644 --- a/practicas/pp5-logInSesion/home.php +++ b/practicas/pp5-logInSesion/home.php @@ -45,10 +45,7 @@ '. $userName .''; - - - + ?>

Introduce un personaje que te guste

diff --git a/practicas/pp5-logInSesion/personaje.php b/practicas/pp5-logInSesion/personaje.php index 4f850dff..06644689 100644 --- a/practicas/pp5-logInSesion/personaje.php +++ b/practicas/pp5-logInSesion/personaje.php @@ -21,9 +21,9 @@ if (!empty($_SESSION['personajes']) && is_array($_SESSION['personajes'])) { foreach ($_SESSION['personajes'] as $personaje) { // sanitizar antes de mostrar - $nombre = htmlspecialchars($personaje['nombrePersonaje'] ?? '', ENT_QUOTES, 'UTF-8'); - $habil = htmlspecialchars($personaje['habilidadPersonaje'] ?? '', ENT_QUOTES, 'UTF-8'); - $img = htmlspecialchars($personaje['urlImgPersonaje'] ?? '', ENT_QUOTES, 'UTF-8'); + $nombre = $personaje['nombrePersonaje']; + $habil = $personaje['habilidadPersonaje']; + $img = $personaje['urlImgPersonaje'] ; echo '
'; echo '

' . $nombre . '

'; From cc09eda3e1b11e29151b42c18d4b19aca248d1ca Mon Sep 17 00:00:00 2001 From: Frank20060 <159519815+Frank20060@users.noreply.github.com> Date: Fri, 24 Oct 2025 15:55:47 +0000 Subject: [PATCH 29/34] empezar pp6 y sesion crud heroes --- practicas/pp6-biblioteca/add_edit_book.php | 56 ++++++ practicas/pp6-biblioteca/css/style.css | 189 +++++++++++++++++++++ practicas/pp6-biblioteca/delete_book.php | 0 practicas/pp6-biblioteca/functions.php | 0 practicas/pp6-biblioteca/home.php | 87 ++++++++++ practicas/pp6-biblioteca/index.php | 50 ++++++ practicas/pp6-biblioteca/login.php | 67 ++++++++ practicas/pp6-biblioteca/logout.php | 0 teoria/teoria5-CRUD/add_edit_character.php | 47 +++++ teoria/teoria5-CRUD/delete_character.php | 1 + teoria/teoria5-CRUD/function.php | 45 +++++ teoria/teoria5-CRUD/index.php | 52 ++++++ 12 files changed, 594 insertions(+) create mode 100644 practicas/pp6-biblioteca/add_edit_book.php create mode 100644 practicas/pp6-biblioteca/css/style.css create mode 100644 practicas/pp6-biblioteca/delete_book.php create mode 100644 practicas/pp6-biblioteca/functions.php create mode 100644 practicas/pp6-biblioteca/home.php create mode 100644 practicas/pp6-biblioteca/index.php create mode 100644 practicas/pp6-biblioteca/login.php create mode 100644 practicas/pp6-biblioteca/logout.php create mode 100644 teoria/teoria5-CRUD/add_edit_character.php create mode 100644 teoria/teoria5-CRUD/delete_character.php create mode 100644 teoria/teoria5-CRUD/function.php create mode 100644 teoria/teoria5-CRUD/index.php diff --git a/practicas/pp6-biblioteca/add_edit_book.php b/practicas/pp6-biblioteca/add_edit_book.php new file mode 100644 index 00000000..b39f20c9 --- /dev/null +++ b/practicas/pp6-biblioteca/add_edit_book.php @@ -0,0 +1,56 @@ + + + + + + Biblioteca Virtual + + + + + +
+
+
+

👋 Bienvenido, NOMBRE DE USUARIO

+

ROL ADMIN O ROL LECTOR???

+
+ + Volver a la Biblioteca + +
+
+ +
+
+

+

+
+ + + +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+ +
+ + + + diff --git a/practicas/pp6-biblioteca/css/style.css b/practicas/pp6-biblioteca/css/style.css new file mode 100644 index 00000000..7a4e650a --- /dev/null +++ b/practicas/pp6-biblioteca/css/style.css @@ -0,0 +1,189 @@ +@import url('https://fonts.googleapis.com/css2?family=Quicksand:wght@300;400;500;600;700&display=swap'); +* +{ + margin: 0; + padding: 0; + box-sizing: border-box; + +} +body +{ + display: flex; + justify-content: center; + align-items: center; + min-height: 100vh; + background: #000; +} +section +{ + position: absolute; + width: 100vw; + height: 100vh; + display: flex; + justify-content: center; + align-items: center; + gap: 2px; + flex-wrap: wrap; + overflow: hidden; +} +section::before +{ + content: ''; + position: absolute; + width: 100%; + height: 100%; + background: linear-gradient(#000,#daa520,#000); + animation: animate 5s linear infinite; +} +@keyframes animate +{ + 0% + { + transform: translateY(-100%); + } + 100% + { + transform: translateY(100%); + } +} +section span +{ + position: relative; + display: block; + width: calc(6.25vw - 2px); + height: calc(6.25vw - 2px); + background: #181818; + z-index: 2; + transition: 1.5s; +} +section span:hover +{ + background: #daa520; + transition: 0s; +} + +section .signin +{ + position: absolute; + width: 400px; + background: #222; + z-index: 1000; + display: flex; + justify-content: center; + align-items: center; + padding: 40px; + border-radius: 4px; + box-shadow: 0 15px 35px rgba(0,0,0,9); +} +section .signin .content +{ + position: relative; + width: 100%; + display: flex; + justify-content: center; + align-items: center; + flex-direction: column; + gap: 40px; +} +section .signin .content h2 +{ + font-size: 2em; + color: #daa520; + text-transform: uppercase; +} +section .signin .content .form +{ + width: 100%; + display: flex; + flex-direction: column; + gap: 25px; +} +section .signin .content .form .inputBox +{ + position: relative; + width: 100%; +} +section .signin .content .form .inputBox input +{ + position: relative; + width: 100%; + background: #333; + border: none; + outline: none; + padding: 25px 10px 7.5px; + border-radius: 10px; + color: #fff; + font-weight: 500; + font-size: 1em; +} +.inputBox input { + + border: none; + border-radius: 8px; + background: #333; +} +section .signin .content .form .inputBox i +{ + position: absolute; + left: 0; + padding: 15px 10px; + font-style: normal; + color: #aaa; + transition: 0.5s; + pointer-events: none; +} +.signin .content .form .inputBox input:focus ~ i, +.signin .content .form .inputBox input:valid ~ i +{ + transform: translateY(-7.5px); + font-size: 0.8em; + color: #fff; +} +.signin .content .form .links +{ + position: relative; + width: 100%; + display: flex; + justify-content: space-between; +} +.signin .content .form .links a +{ + color: #fff; + text-decoration: none; +} +.signin .content .form .links a:nth-child(2) +{ + color: #daa520; + font-weight: 600; +} +.signin .content .form .inputBox input[type="submit"] +{ + padding: 10px; + background: #daa520; + color: #000; + font-weight: 600; + font-size: 1.35em; + letter-spacing: 0.05em; + cursor: pointer; +} +input[type="submit"]:active +{ + opacity: 0.6; +} +@media (max-width: 900px) +{ + section span + { + width: calc(10vw - 2px); + height: calc(10vw - 2px); + } +} +@media (max-width: 600px) +{ + section span + { + width: calc(20vw - 2px); + height: calc(20vw - 2px); + } +} + \ No newline at end of file diff --git a/practicas/pp6-biblioteca/delete_book.php b/practicas/pp6-biblioteca/delete_book.php new file mode 100644 index 00000000..e69de29b diff --git a/practicas/pp6-biblioteca/functions.php b/practicas/pp6-biblioteca/functions.php new file mode 100644 index 00000000..e69de29b diff --git a/practicas/pp6-biblioteca/home.php b/practicas/pp6-biblioteca/home.php new file mode 100644 index 00000000..c33721af --- /dev/null +++ b/practicas/pp6-biblioteca/home.php @@ -0,0 +1,87 @@ + + + + + + + Biblioteca Virtual - Home + + + + + + +
+
+
+ Foto de perfil +
+

👋 Bienvenido, AQUÍ VA EL USUARIO!

+ +

Admin ✏️

+ +

Lector 📚

+ +
+
+ + Cerrar sesión ❌ + +
+
+ +
+
+

Biblioteca Virtual

+

Disfruta explorando nuestra colección de libros

+
+ + + + + + + +
+ +
+
+ +
+
TITULO
+

Autor: AUTOR

+

DESCRIPCIÓN

+
+ + + + +
+
+ +
+
+ + + + diff --git a/practicas/pp6-biblioteca/index.php b/practicas/pp6-biblioteca/index.php new file mode 100644 index 00000000..141d1e75 --- /dev/null +++ b/practicas/pp6-biblioteca/index.php @@ -0,0 +1,50 @@ + + + + + + Bienvenido + + + + + +

Bienvenido

+ Log In + + + + + + + \ No newline at end of file diff --git a/practicas/pp6-biblioteca/login.php b/practicas/pp6-biblioteca/login.php new file mode 100644 index 00000000..13726b0e --- /dev/null +++ b/practicas/pp6-biblioteca/login.php @@ -0,0 +1,67 @@ + "admin", "password" => "adminpass", "role" => "admin"], + ["username" => "reader", "password" => "readerpass", "role" => "lector"] +]; + +// Procesamiento del formulario. + + + // Validación de credenciales. + + + +?> + + + + + + + Biblioteca Virtual - Login + + + + +
+ + + + + + + +
+ + + + + diff --git a/practicas/pp6-biblioteca/logout.php b/practicas/pp6-biblioteca/logout.php new file mode 100644 index 00000000..e69de29b diff --git a/teoria/teoria5-CRUD/add_edit_character.php b/teoria/teoria5-CRUD/add_edit_character.php new file mode 100644 index 00000000..ed18ca37 --- /dev/null +++ b/teoria/teoria5-CRUD/add_edit_character.php @@ -0,0 +1,47 @@ + NOS DICE SI ESTAMOS EDITANDO O AÑADIENDO +$id = null; +$nombre = $imagen = $poder = $desc = ""; + +//SI HAY UN ID EN LA URL ESTAMOS EDITANDO + +if(isset($_GET['id'])){ + $id = $_GET['id']; + + if(isset($_SESSION['personajes'][$id])){ + $editMode = true; + $personaje = $_SESSION['personajes'][$id]; + + $nombre = $personaje['nombre']; + $imagen = $personaje['img']; + $poder = $personaje['poder']; + $desc = $personaje['descripcion']; + + } +} + +///Segundo paso : PROCESAR EL FORMULARIO (POST) + +if($_SERVER['RECUEST_METHOD'] == 'POST'){ + + $nombre = $_POST['nombre']; + $imagen = $_POST['img']; + $poder = $_POST['poder']; + $desc = $_POST['descripcion']; +} + +if($editMode){ + editarPersonaje($id, $nombre, $imagen, $poder, $desc); +}else{ + agregarPersonaje($nombre, $immagen, $poder, $desc); +} + + + +?> \ No newline at end of file diff --git a/teoria/teoria5-CRUD/delete_character.php b/teoria/teoria5-CRUD/delete_character.php new file mode 100644 index 00000000..3ead6b05 --- /dev/null +++ b/teoria/teoria5-CRUD/delete_character.php @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/teoria/teoria5-CRUD/function.php b/teoria/teoria5-CRUD/function.php new file mode 100644 index 00000000..8c392297 --- /dev/null +++ b/teoria/teoria5-CRUD/function.php @@ -0,0 +1,45 @@ + 0, + 'nombre' => 'Iron Man', + 'img' => 'https://preview.redd.it/my-drawing-of-iron-man-v0-zemup6vdi5le1.png?width=640&crop=smart&auto=webp&s=e2332067977b9152c8b0f481295df1255665cf8e', + 'poder' => 'Dinero y Robots', + 'descripcion' => 'Tony Stark, io con mucho dinero y mu listo que hace robots' + ]; +}; + +//Funcion para añadir personaje (CREATE en BDD) +function agregarPersonaje($nombre, $img, $poder, $descripcion){ + array_push($_SESSION['personajes'], + [ + 'nombre' => $nombre, + 'img' => $img, + 'poder' => $poder, + 'descripcion' => $descripcion + ] + ); +} +//Funcion que edita un personaje +function editarPersonaje($id, $nombre, $img, $poder, $descripcion){ + //Comprovamos id + if(isset($_SESSION['personajes'][$id])){ + + $_SESSION['personajes'][$id] = [ + [ + 'nombre' => $nombre, + 'img' => $img, + 'poder' => $poder, + 'descripcion' => $descripcion + ] + ]; + + } +}; + + + +?> \ No newline at end of file diff --git a/teoria/teoria5-CRUD/index.php b/teoria/teoria5-CRUD/index.php new file mode 100644 index 00000000..17c338dd --- /dev/null +++ b/teoria/teoria5-CRUD/index.php @@ -0,0 +1,52 @@ + + + + + + + + Marvel CRUD + + + + + + + +
+

Marvel personajes

+ + Añadir personaje +
+ + +
+ +
+
+ + + +
+
+ + + +
+ + + + + + + + + + + + + \ No newline at end of file From 1033e9e9911814ff2091fb61295b692d031f88a2 Mon Sep 17 00:00:00 2001 From: Frank20060 <159519815+Frank20060@users.noreply.github.com> Date: Fri, 24 Oct 2025 16:29:22 +0000 Subject: [PATCH 30/34] no va nada --- practicas/pp5-logInSesion/home.php | 11 +------- practicas/pp6-biblioteca/home.php | 6 ++--- practicas/pp6-biblioteca/login.php | 40 ++++++++++++++++++++++------- practicas/pp6-biblioteca/logout.php | 9 +++++++ 4 files changed, 43 insertions(+), 23 deletions(-) diff --git a/practicas/pp5-logInSesion/home.php b/practicas/pp5-logInSesion/home.php index b1613b81..bb609c1b 100644 --- a/practicas/pp5-logInSesion/home.php +++ b/practicas/pp5-logInSesion/home.php @@ -3,16 +3,7 @@ $userName = trim($_POST['userName'] ?? ''); $userPass = trim($_POST['userpass'] ?? ''); include 'usuarios.php'; -$aux = false; -foreach ($usuarios as $usuario) { - if ($userUser == $usuario['user'] && $userPass == $usuario['password']) { - $aux = true; - } -} -if(isset($_SESSION['user'])){$aux = true;} -if(!$aux){ - header("Location: logout.php?incorrecto=true"); -} + $_SESSION['user'] = $userName; diff --git a/practicas/pp6-biblioteca/home.php b/practicas/pp6-biblioteca/home.php index c33721af..4c4e8c98 100644 --- a/practicas/pp6-biblioteca/home.php +++ b/practicas/pp6-biblioteca/home.php @@ -1,11 +1,9 @@ diff --git a/practicas/pp6-biblioteca/login.php b/practicas/pp6-biblioteca/login.php index 13726b0e..7599778f 100644 --- a/practicas/pp6-biblioteca/login.php +++ b/practicas/pp6-biblioteca/login.php @@ -7,12 +7,35 @@ ["username" => "reader", "password" => "readerpass", "role" => "lector"] ]; -// Procesamiento del formulario. +$_GET['username'] = $username; +$_GET['pasw'] = $pasw; +$_GET['img'] = $img; + +$credenciales = [ + "username" => $username, + "pasw" => $pasw, + "img" => $img +]; + +foreach ($usuarios as $usuario) { + if ($username == $usuario['username'] && $pasw == $usuario['password']) { + $_SESSION['credenciales'] = $credenciales; + header('Location: home.php'); + }else{ + header("Location: logout.php?incorrecto=true"); + } +} + +if(!$aux){ + header("Location: logout.php?incorrecto=true"); +} + +// Verifica el rol del usuario + +// Obtener la lista de libros desde la sesión + - // Validación de credenciales. - - ?> @@ -36,23 +59,22 @@