diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile
index b847dc58..3c777a2e 100644
--- a/.devcontainer/Dockerfile
+++ b/.devcontainer/Dockerfile
@@ -2,6 +2,7 @@
# [Choice] PHP version (use -bullseye variants on local arm64/Apple Silicon): 8, 8.0, 7, 7.4, 7.3, 8-bullseye, 8.0-bullseye, 7-bullseye, 7.4-bullseye, 7.3-bullseye, 8-buster, 8.0-buster, 7-buster, 7.4-buster, 7.3-buster
ARG VARIANT=7-bullseye
FROM mcr.microsoft.com/vscode/devcontainers/php:0-${VARIANT}
+RUN docker-php-ext-install mysqli pdo_mysql
# [Choice] Node.js version: none, lts/*, 16, 14, 12, 10
ARG NODE_VERSION="none"
diff --git a/index.php b/index.php
index f15e9353..2454cb73 100644
--- a/index.php
+++ b/index.php
@@ -18,7 +18,8 @@ function sayHello($name) {
";
+}
+?>
+
+
+
+ Visual Studio Code Remote :: PHP
+
+
+
+
+
+
+ Módulo 7 - Práctica 1. Mi primera aplicación en PHP
+
+
+
+
+
+
+
+
+
Frank Villar Redondo
+
+
+
Explicacion codigo señalado
+
+ = "Lo primero 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. l'Alber t dema no va a l'escola "; ?>
+
+
+
+
+
+
+ Frank Villar Redodno
+
+
+
+
+
+
\ 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 00000000..c02ab4e1
Binary files /dev/null and b/practicas/pp1-primera-app/imagenes/logo-fpllefia.jfif differ
diff --git a/practicas/pp1-primera-app/imagenes/yo.jpg b/practicas/pp1-primera-app/imagenes/yo.jpg
new file mode 100644
index 00000000..02f047fe
Binary files /dev/null and b/practicas/pp1-primera-app/imagenes/yo.jpg differ
diff --git a/practicas/pp2/ex1.php b/practicas/pp2/ex1.php
new file mode 100644
index 00000000..bad68f00
--- /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..864cdb42
--- /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/ex3.php b/practicas/pp2/ex3.php
new file mode 100644
index 00000000..779a58dd
--- /dev/null
+++ b/practicas/pp2/ex3.php
@@ -0,0 +1,65 @@
+
+
+
+
+
+ Ejercicio 3
+
+
+
+
+ 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"
+ ";
+ }
+
+
+ ?>
+
+
\ 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 "
+
+ ";
+ };
+
+ }
+
+ ?>
+
+
+
+
+
\ No newline at end of file
diff --git a/practicas/pp2/index.php b/practicas/pp2/index.php
new file mode 100644
index 00000000..d6852820
--- /dev/null
+++ b/practicas/pp2/index.php
@@ -0,0 +1,41 @@
+
+
+
+
+
+ Portada pp2
+
+
+
+ Practica 2
+
+
+
+ Extras PP2
+
+
+
+
+
\ No newline at end of file
diff --git a/practicas/pp2b/ex1.php b/practicas/pp2b/ex1.php
new file mode 100644
index 00000000..2dbff8d3
--- /dev/null
+++ b/practicas/pp2b/ex1.php
@@ -0,0 +1,140 @@
+
+
+
+
+
+ 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
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
+
+
+
+
\ No newline at end of file
diff --git a/practicas/pp3-peliculas/detalles.php b/practicas/pp3-peliculas/detalles.php
new file mode 100644
index 00000000..1a8f8976
--- /dev/null
+++ b/practicas/pp3-peliculas/detalles.php
@@ -0,0 +1,53 @@
+
+
+
+
+
+ Detalles CinesFrank
+
+
+
+
+
+
+
+
+
Trailer
+
+
+
" . $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 "
+
+
Inicio
+
+ ";
+
+ ?>
+
+
+
\ No newline at end of file
diff --git a/practicas/pp3-peliculas/estilo.css b/practicas/pp3-peliculas/estilo.css
new file mode 100644
index 00000000..ce1f7941
--- /dev/null
+++ b/practicas/pp3-peliculas/estilo.css
@@ -0,0 +1,227 @@
+body{
+
+ background-color:#121212;
+ font-family: 'Lucida Sans', 'Lucida Sans Regular', 'Lucida Grande', 'Lucida Sans Unicode', Geneva, Verdana, sans-serif;
+
+
+
+}
+header{
+
+ justify-items: center;
+ text-align: center;
+ color:#FFFFFF;
+ text-shadow: 0 2px 5px #E50914;
+ font-size: 1.4em;
+
+
+}
+
+.cartelera {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 20px;
+ justify-content: center;
+ padding: 20px;
+}
+
+.card {
+ position: relative;
+ width: 220px;
+ height: 330px;
+ border-radius: 10px;
+ overflow: hidden;
+ box-shadow: 0 2px 5px #E50914;
+ 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;
+}
+
+.overlay h2 {
+ margin: 0 0 10px;
+ font-size: 18px;
+ color: #E50914;
+ text-shadow: 0 8px 15px black;
+}
+
+.horarios {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 5px;
+ margin-bottom: 10px;
+}
+
+.horarios div {
+ background: #333;
+ padding: 4px 8px;
+ border-radius: 4px;
+ font-size: 12px;
+}
+
+.botones {
+ display: flex;
+ gap: 10px;
+ flex-wrap: wrap;
+}
+
+/* Estilos para los botones de acción */
+.botones button {
+ background-color: #E50914;
+ 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;
+}
+
+
+
+
+
+
+
+/* Detalles */
+
+.mainDetalles{
+
+ display: flex;
+ flex-direction: row;
+ gap: 40px;
+ font-size: 1.4em;
+ color: #FFFFFF;
+
+}
+.mainDetalles h1{
+
+ text-shadow: 0 2px 5px #E50914;
+
+}
+.mainDetalles span{
+
+ color: #E50914;
+ font-weight: bold;
+
+}
+.izquierda{
+
+ display: flex;
+ flex-direction: column;
+ gap: 20px;
+
+}
+.izquierda img{
+
+ width: 500px;
+ border-radius: 4px;
+ box-shadow: 0 2px 5px rgb(44, 44, 44);
+
+}
+.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;
+}
+.mainDetalles button:hover{
+ box-shadow: 0 2px 5px #E50914;
+}
+.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;
+}
+.mainTrailer button:hover{
+ box-shadow: 0 2px 5px #E50914;
+}
+
diff --git a/practicas/pp3-peliculas/index.php b/practicas/pp3-peliculas/index.php
new file mode 100644
index 00000000..bcebc63a
--- /dev/null
+++ b/practicas/pp3-peliculas/index.php
@@ -0,0 +1,55 @@
+
+
+
+
+
+ CinesFrank
+
+
+
+
+
+ CinesFrank
+ Cartelera
+
+
+
+
+
+
+
$peli[nombre]
+
+ ";
+
+ foreach($peli['horarios'] as $horas){
+ echo "
$horas
";
+ }
+
+ echo "
+
+
+
+
+ ";
+ $i++;
+ }
+
+ ?>
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/practicas/pp3-peliculas/peliculas.php b/practicas/pp3-peliculas/peliculas.php
new file mode 100644
index 00000000..955ca9a8
--- /dev/null
+++ b/practicas/pp3-peliculas/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/embed/JfVOs4VSpmA?si=cHzfEGBc90BaWZ_i&autoplay=1'
+ ],
+ [
+ '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/embed/n9xhJrPXop4?si=jQwDoGjpqKimNRUw&autoplay=1'
+ ],
+ [
+ '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/embed/IgYs_NDyaLs?si=B1TI6mjqBmVzxt-f&autoplay=1'
+ ],
+ [
+ '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/embed/BIhNsAtPbPI?si=bAjzYgcEnAPybzja&autoplay=1'
+ ],
+ [
+ '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/embed/CmRih_VtVAs?si=x1ISKFUpZX9a9W5m&autoplay=1'
+ ],
+ [
+ '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/embed/BpdDN9d9Jio?si=uqo7lshFFjHLb9db&autoplay=1'
+ ],
+ [
+ '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/embed/k3zJZXbAPpE?si=m0Nr36u4VOulvJ3Q&autoplay=1'
+ ],
+ [
+ '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/embed/sS6ksY8xWCY?si=YnRNh9kHY6p3J20j&autoplay=1'
+ ],
+ [
+ '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/embed/kw50vQA1S-o?si=kbmi54z9K_5F-Biy&autoplay=1'
+ ],
+ [
+ '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/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..eb67fea6
--- /dev/null
+++ b/practicas/pp3-peliculas/trailer.php
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+ Trailer
+
+
+
+
+
+ ";
+ ?>
+ Inicio
+
+
+
\ No newline at end of file
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 .= 'Imagen Nombre Precio (€) Disponibilidad ';
+
+ foreach($productos as $producto){
+ $disponibilidad = $producto['disponible'] ? 'Disponible' : 'No disponible';
+ $claseDisponibilidad = $producto['disponible'] ? 'disponible' : 'no-disponible';
+
+ $tabla .= '';
+ $tabla .= ' ';
+ $tabla .= '' . $producto['nombre'] . ' ';
+ $tabla .= '' . $producto['precio'] . ' ';
+ $tabla .= '' . $disponibilidad . ' ';
+ $tabla .= ' ';
+ }
+
+ $tabla .= '';
+
+ return $tabla;
+
+ }
+
+ function muestraInfoContacto($nombre, $telefono, $foto){
+
+ $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 ' ';
+ 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/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 '