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 + + + + +
+ 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

+

+ + +

+
+
+
+ +
+ + + \ 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" +
+

$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 new file mode 100644 index 00000000..d6852820 --- /dev/null +++ b/practicas/pp2/index.php @@ -0,0 +1,41 @@ + + + + + + Portada pp2 + + + +

Practica 2

+

Ejercicio 1 - Pares 50-500

+

Ejercicio 2 - Tablas Multiplicar

+

Ejercicio 3 - Num apeatorio Par o Impar

+

Extras PP2

+

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..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

+

Ejercicio 1 - Lista de pares 50 - 500 clasificados

+

Ejercicio 2 - Analisis de valores aleatorios

+ + \ 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 + + + + +
+ + + 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 " +
+ +
+ "; + + ?> + + + \ 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

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

$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 + + + +
+

Trailer

+
+
+ "; + ?> + +
+ + \ 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 .= '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/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 '
Cerrar Sesion
'; + + +}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..bb609c1b --- /dev/null +++ b/practicas/pp5-logInSesion/home.php @@ -0,0 +1,53 @@ + $nombre, + 'habilidadPersonaje' => $habil, + 'urlImgPersonaje' => $img, + ]; + $_SESSION['personajes'][] = $nuevo; + + header('Location: home.php'); //pa que no se vuelva a enviar dos vezes si F5 +} +?> + + + + + + Home + + + + +
+

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/practicas/pp6-biblioteca/add_edit_book.php b/practicas/pp6-biblioteca/add_edit_book.php new file mode 100644 index 00000000..31cd436b --- /dev/null +++ b/practicas/pp6-biblioteca/add_edit_book.php @@ -0,0 +1,94 @@ + + + + + + + + Biblioteca Virtual - <?= ucfirst($modo) ?> Libro + + + + +
+
+

+

+
+ +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+
+
+ + + + + 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..05b08fce --- /dev/null +++ b/practicas/pp6-biblioteca/delete_book.php @@ -0,0 +1,20 @@ + \ No newline at end of file diff --git a/practicas/pp6-biblioteca/functions.php b/practicas/pp6-biblioteca/functions.php new file mode 100644 index 00000000..ef7175a9 --- /dev/null +++ b/practicas/pp6-biblioteca/functions.php @@ -0,0 +1,77 @@ + 1, + "titulo" => "El Quijote", + "autor" => "Miguel de Cervantes", + "descripcion" => "Una novela sobre aventuras de un caballero.", + "imagen" => "https://m.media-amazon.com/images/I/91CIwR3QU1L._UF1000,1000_QL80_.jpg" + ], + [ + "id" => 2, + "titulo" => "1984", + "autor" => "George Orwell", + "descripcion" => "Novela distópica sobre vigilancia y control.", + "imagen" => "https://www.libreriaalberti.com/media/img/portadas/_visd_0000JPG02I0T.jpg" + ] +]; + + $libros = $_SESSION['libros']; + +}else{ + $libros = $_SESSION['libros']; + +} +return $libros; +}; + + + +function agregarLibro($titulo, $autor, $descripcion, $imagen){ + $nuevo_id = count($_SESSION['libros']); + array_push($_SESSION['libros'], [ + "id" => $nuevo_id, + "titulo" => $titulo, + "autor" => $autor, + "descripcion" => $descripcion, + "imagen" => $imagen + ]); +} + + +function editarLibro($id, $titulo, $autor, $descripcion, $imagen){ + + if(isset($_SESSION['libros'][$id])){ + $_SESSION['libros'][$id] = [ + "titulo" => $titulo, + "autor" => $autor, + "descripcion" => $descripcion, + "imagen" => $imagen + ]; + } +} + + +function eliminarLibro($id) { + // Comprobamos que exista la sesión de libros y que el id exista + if (isset($_SESSION['libros'][$id])) { + + // Eliminamos el libro con ese ID + unset($_SESSION['libros'][$id]); + + // Reindexamos el array para mantener los índices consecutivos + $_SESSION['libros'] = array_values($_SESSION['libros']); + + // Volvemos a asignar IDs consecutivos empezando desde 0 + for ($i = 0; $i < count($_SESSION['libros']); $i++) { + $_SESSION['libros'][$i]['id'] = $i; + } + } +} + +?> \ No newline at end of file diff --git a/practicas/pp6-biblioteca/header.php b/practicas/pp6-biblioteca/header.php new file mode 100644 index 00000000..ce1d4655 --- /dev/null +++ b/practicas/pp6-biblioteca/header.php @@ -0,0 +1,26 @@ + + +
+
+ +
+ Foto de perfil +
+ 👋 Bienvenido, ! + + ✏️ Admin + + 📚 Lector + +
+
+ + + + + Cerrar sesión ❌ + + Ir a la Biblioteca + +
+
\ No newline at end of file diff --git a/practicas/pp6-biblioteca/home.php b/practicas/pp6-biblioteca/home.php new file mode 100644 index 00000000..817e1efc --- /dev/null +++ b/practicas/pp6-biblioteca/home.php @@ -0,0 +1,81 @@ + + + + + + + Biblioteca Virtual - Home + + + + + + + +
+
+

Biblioteca Virtual

+

Disfruta explorando nuestra colección de libros

+
+ + + + + + + + + +
+ +
+
+ <?= htmlspecialchars($libro['titulo']) ?> +
+
+

Autor:

+

+
+ + + + + + +
+
+ + +
+
+ + + + 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..b1f16b86 --- /dev/null +++ b/practicas/pp6-biblioteca/login.php @@ -0,0 +1,99 @@ + "admin", "password" => "adminpass", "role" => "admin"], + ["username" => "reader", "password" => "readerpass", "role" => "lector"] +]; + + +// Verifica el rol del usuario +if(isset($_GET['incorrecto'])){ + if($_GET['incorrecto']){ + $error = 'Error en las credenciales'; + } +} +// Obtener la lista de libros desde la sesión + +if(isset($_POST['username']) && isset($_POST['pasw'])){ + $username = trim( $_POST['username']); + $pasw = trim($_POST['pasw'] ); + $img = trim($_POST['img']); + $login = false; + + + foreach ($usuarios as $usuario) { + if ($username == $usuario['username'] && $pasw == $usuario['password']) { + $credenciales = [ + "username" => $username, + "img" => $img, + "rol" => $usuario['role'] + ]; + + $_SESSION['credenciales'] = $credenciales; + $login = true; + break; + } + } + if(!$login){ + header("Location: login.php?incorrecto=true"); + }else{ + header('Location: home.php?loged=true'); + } + +} + + + +?> + + + + + + + Biblioteca Virtual - Login + + + + +
+ + + + + + + +
+ + + + + diff --git a/practicas/pp6-biblioteca/logout.php b/practicas/pp6-biblioteca/logout.php new file mode 100644 index 00000000..b8e750eb --- /dev/null +++ b/practicas/pp6-biblioteca/logout.php @@ -0,0 +1,9 @@ + + + + + + + + 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 diff --git a/teoria/teoria2-array/index.php b/teoria/teoria2-array/index.php new file mode 100644 index 00000000..8d0854c3 --- /dev/null +++ b/teoria/teoria2-array/index.php @@ -0,0 +1,16 @@ + + + + + + Teoria2 - Array + + +

Teoria2 - Array

+ + + \ No newline at end of file diff --git a/teoria/teoria2-array/listas/asociativas.php b/teoria/teoria2-array/listas/asociativas.php new file mode 100644 index 00000000..32a32085 --- /dev/null +++ b/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/teoria/teoria2-array/listas/multidimensionales.php b/teoria/teoria2-array/listas/multidimensionales.php new file mode 100644 index 00000000..9e9725c4 --- /dev/null +++ b/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/teoria/teoria2-array/listas/simples.php b/teoria/teoria2-array/listas/simples.php new file mode 100644 index 00000000..cff5d98b --- /dev/null +++ b/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/teoria/teoria2-array/parametrosURL/pag1.php b/teoria/teoria2-array/parametrosURL/pag1.php new file mode 100644 index 00000000..c98ca8a2 --- /dev/null +++ b/teoria/teoria2-array/parametrosURL/pag1.php @@ -0,0 +1,13 @@ + + + + + + Pagina1 + + +

Pagina para enviar dados

+ + + + \ No newline at end of file diff --git a/teoria/teoria2-array/parametrosURL/pag2.php b/teoria/teoria2-array/parametrosURL/pag2.php new file mode 100644 index 00000000..4fc930dc --- /dev/null +++ b/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 diff --git a/teoria/teoria3-formularios/index.php b/teoria/teoria3-formularios/index.php new file mode 100644 index 00000000..e2be82bf --- /dev/null +++ b/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/teoria/teoria3-funciones/index.php b/teoria/teoria3-funciones/index.php new file mode 100644 index 00000000..4397ddb1 --- /dev/null +++ b/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 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 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 diff --git a/teoria/teoria6PP6-DasesDeDatos/data/data.php b/teoria/teoria6PP6-DasesDeDatos/data/data.php new file mode 100644 index 00000000..d45a536b --- /dev/null +++ b/teoria/teoria6PP6-DasesDeDatos/data/data.php @@ -0,0 +1,25 @@ +query("SELECT * from USUARIOS"); + echo "
"; + var_dump($users); + echo "
"; + $resultUser = $users -> fetch_all(MYSQLI_ASSOC); + + var_dump($resultUser); + echo "
"; + + print_r($resultUser); + + function returnUsersData(){ + global $mysqli; + $users = $mysqli->query("SELECT * from USUARIOS"); + $resultUser = $users -> fetch_all(MYSQLI_ASSOC); + return $resultUser; + + } + + + diff --git a/teoria/teoria6PP6-DasesDeDatos/dbconfig/config.php b/teoria/teoria6PP6-DasesDeDatos/dbconfig/config.php new file mode 100644 index 00000000..3ab834be --- /dev/null +++ b/teoria/teoria6PP6-DasesDeDatos/dbconfig/config.php @@ -0,0 +1,21 @@ + connect_error){ + + die("Error de conexion" . $mysqli->connect_error); + + }else{ + echo "Conexión exitosa con la base de datos."; + } + + + + +?> \ No newline at end of file diff --git a/teoria/teoria6PP6-DasesDeDatos/index.php b/teoria/teoria6PP6-DasesDeDatos/index.php new file mode 100644 index 00000000..e772154d --- /dev/null +++ b/teoria/teoria6PP6-DasesDeDatos/index.php @@ -0,0 +1,11 @@ + \ No newline at end of file