Ejercicio 1. Cálculo del salario en PHP.
Realiza el siguiente programa en HTML y PHP. Nada de JavaScript. Se puede usar CSS.
1. El programa debe ser un formulario en HTML llamado index.php que recoja los siguientes datos de una persona:
- Nombre
- Apellidos
- Salario (número con decimales)
- Edad (número)
2. Con los datos recogidos en el formulario index.php, calcular un nuevo salario en otro fichero llamado salario.php para esa persona con la siguiente situación, mostrando un mensaje con el nuevo salario de la persona.
a. Si el salario es >2000 € no cambiará.
b. Si el salario se encuentra entre >= 1000€ y <=2000€.
i. Si edad >45 se sube un 3% al salario.
ii. Si edad <=45 se sube un 10% al salario.
c. Si el salario es <1000€.
i. Los menores de 30 años cobrarán a partir de ahora 1100€.
ii. Los >=30 y <=45 años se le sube un 3%.
iii. A los >45 años se les sube un 15%.
3. En el caso de que no se inserte algún dato en el formulario index.php sacar un mensaje de error diciendo “FALTAN DATOS” y un enlace que nos lleve de nuevo a index.php.
Descargar solución ejercicio 1.
Ejercicio 2. Área de un polígono.
Los polígonos soportados serán triángulo, cuadrado y rectángulo. La fórmula para calcular el área de cada uno de ellos es diferente, sin embargo nuestra función debe ser capaz de calcularla independientemente de cuál de ellos sea.
Las fórmulas son:
- Triángulo: base por altura dividido entre 2.
- Cuadrado: lado al cuadrado (o lado por lado)
- Rectángulo: ancho por alto.
Pensando en este reto como algo que podría escalar en el futuro y que nos podrían pedir añadir nuevos polígonos, y cada uno de ellos tiene su fórmula y los datos de entrada que necesitaremos serán diferentes, vamos a utilizar la programación orientada a objetos.
Tendremos una clase por cada polígono, que implementará una interfaz que contiene un método para calcular el área. De este modo, toda clase que implemente esta interfaz deberá tener su propio método para calcular su área.
Solución ejercicio 2
<?php declare(strict_types=1); function printArea(Polygon $polygon): float { return $polygon->calcArea(); } interface Polygon { public function calcArea(); } class Triangle implements Polygon { private $base; private $height; public function __construct(float $base, float $height) { $this->base = $base; $this->height = $height; } public function calcArea(): float { return ($this->base * $this->height) / 2; } } class Square implements Polygon { private $side; public function __construct(float $side) { $this->side = $side; } public function calcArea(): float { return $this->side * $this->side; } } class Rectangle implements Polygon { private $width; private $height; public function __construct(float $width, float $height) { $this->width = $width; $this->height = $height; } public function calcArea(): float { return $this->width * $this->height; } } echo "El área del triángulo es " . printArea(new Triangle(3.6, 4)) . "\n"; echo "<br>"; echo "El área del cuadrado es " . printArea(new Square(4)) . "\n"; echo "<br>"; echo "El área del rectángulo es " . printArea(new Rectangle(4, 6)) . "\n";
La función única que nos piden en printArea(). Esta función recibe como parámetro un objeto de tipo Polygon, que son cualquiera de las clases que hemos creado y que implementan la interfaz Polygon.
Dentro de esta función, simplemente retornamos el valor que nos devuelve el método calcArea() que tiene nuestro objeto $polygon, y que para cada clase (Triangle, Square o Rectangle) implementa una lógica del cálculo del área diferente.
Ejercicio 3. Formularios.
Realiza el siguiente formulario.
1. El formulario se debe validar.
2. En el desplegable Educación se debe mostrar:
- Sin estudios.
- Educación Obligatoria. (Debe aparecer por defecto)
- Formación profesional.
- Universidad.
3. En Idiomas se debe seleccionar por defecto Español.
Solución ejercicio 3
<!doctype html> <html> <head> <title>Procesa PHP</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500;700&display=swap"> <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.15.4/css/all.css"> <link rel="stylesheet" type="text/css" href="estilos.css"> </head> <body> <h2>Formulario:</h2> <!-- Para que se envíe al mismo documento --> <form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>" method="post"> Nombre: <input type="text" name="nombre" maxlength="50"><br> Contraseña: <input type="password" name="password"><br> Educacion: <select name="educacion"> <option value="sin-estudios">Sin estudios</option> <option value="educacion-obligatoria" selected="selected">Educación Obligatoria</option> <option value="formacion-profesional">Formación profesional</option> <option value="universidad">Universidad</option> </select> <br> Nacionalidad: <input type="radio" name="nacionalidad" value="hispana">Hispana</input> <input type="radio" name="nacionalidad" value="otra">Otra</input> <br> Idiomas: <input type="checkbox" name="idiomas[]" value="español" checked="checked">Español</input> <input type="checkbox" name="idiomas[]" value="inglés">Inglés</input> <input type="checkbox" name="idiomas[]" value="francés">Francés</input> <input type="checkbox" name="idiomas[]" value="aleman">Alemán</input> <br> Email: <input type="text" name="email"> <br> Sitio Web: <input type="text" name="sitioweb"> <br> <!-- Botón de enviar --> <input type="submit" name="submit" value="Enviar"> </form> <?php function filtrado($datos){ $datos = trim($datos); // Elimina espacios antes y después de los datos $datos = stripslashes($datos); // Elimina backslashes \ $datos = htmlspecialchars($datos); // Traduce caracteres especiales en entidades HTML return $datos; return $datos; } if(isset($_POST["submit"]) && $_SERVER["REQUEST_METHOD"] == "POST"){ $nombre = filtrado($_POST["nombre"]); $password = filtrado($_POST["password"]); $educacion = filtrado($_POST["educacion"]); $nacionalidad = filtrado($_POST["nacionalidad"]); $idiomas = filtrado(implode(", ", $_POST["idiomas"])); // Utilizamos implode para pasar el array a string $email = filtrado($_POST["email"]); $sitioweb = filtrado($_POST["sitioweb"]); } ?> <?php if(isset($_POST["submit"])): ?> <h2>Mostrar datos enviados</h2> Nombre : <?php isset($nombre) ? print $nombre : ""; ?> <br> Contraseña : <?php isset($password) ? print $password : ""; ?> <br> Educación : <?php isset($educacion) ? print $educacion : ""; ?> <br> Nacionalidad : <?php isset($nacionalidad) ? print $nacionalidad : "";?> <br> Idiomas : <?php isset($idiomas) ? print $idiomas : ""; ?> <br> Email : <?php isset($email) ? print $email : ""; ?> <br> Sitio web : <?php isset($sitioweb) ? print $sitioweb : ""; ?> <br> <?php endif; ?> <?php if(isset($_POST["submit"]) && $_SERVER["REQUEST_METHOD"] == "POST") { // El nombre y contraseña son campos obligatorios if(empty($_POST["nombre"])){ $errores[] = "El nombre es requerido"; } if(empty($_POST["password"]) || strlen($_POST["password"]) < 5) { $errores[] = "La contraseña es requerida y ha de ser mayor a 5 caracteres"; } // El email es obligatorio y ha de tener formato adecuado if(!filter_var($_POST["email"], FILTER_VALIDATE_EMAIL) || empty($_POST["email"])) { $errores[] = "No se ha indicado email o el formato no es correcto"; } // El sitio web es obligatorio y ha de tener formato adecuado if(!filter_var($_POST["sitioweb"], FILTER_VALIDATE_URL) || empty($_POST["sitioweb"])) { $errores[] = "No se ha indicado sitio web o el formato no es correcto"; } // Si el array $errores está vacío, se aceptan los datos y se asignan a variables if(empty($errores)) { $nombre = filtrado($_POST["nombre"]); $password = filtrado($_POST["password"]); $educacion = filtrado($_POST["educacion"]); $nacionalidad = filtrado($_POST["nacionalidad"]); $idiomas = filtrado(implode(", ", $_POST["idiomas"])); // Utilizamos implode para pasar el array a string $email = filtrado($_POST["email"]); $sitioweb = filtrado($_POST["sitioweb"]); } } ?> <ul> <?php if(isset($errores)) { foreach ($errores as $error) { echo "<li> $error </li>"; } } ?> </ul> </body> </html>
Artículo en construcción, en breve iré añadiendo más ejercicios
Una idea sobre “Ejercicios resueltos PHP nivel medio”