Ejercicios resueltos PHP nivel medio

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.

Crea una única función (importante que sólo sea una), que sea capaz de calcular y retornar el área de un polígono.
 - La función recibirá por parámetro sólo UN polígono a la vez.
 - Los polígonos soportados serán Triángulo, Cuadrado y Rectángulo.
 - Imprime el cálculo del área de un polígono de cada tipo.

El ejercicio se resolverá aplicando Orientación a Objetos
Importante detenernos en la petición expresa que se hace en el primer párrafo: «crear una única función (importante que sólo sea una)«. Es decir, esa función recibirá «algo» y ese algo puede ser «cualquier cosa». Cualquier cosa que sea un polígono, claro.

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.

Así, la lógica del cálculo del área de cada polígono, es responsabilidad de cada clase, y podremos añadir en un futuro tantas clases como queramos sin modificar el código ni la lógica de nuestra función principal.

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.

formularios en PHP

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

En Construcción

slot gacor

slot gacor

https://badudu.org/

badudu

slot gacor

https://siakad.unikamamuju.ac.id/fonts/-/starlight-princess/

slot88

slot gacor

https://ninjajago.sbs/

https://labskill.umtas.ac.id/wp-content/slot-gacor/

https://kamalinews.co.id/wp-content/slot-deposit-qris/

https://lsgi.org/

https://lsgi.org/

ninjajago

slot777

slot88

http://upforfifty.xyz/

slot gacor

slot gacor

slot88

slot

https://katalog.uinsyahada.ac.id/slot/

situs slot gacor 2023

slot gacor

slot

https://게이코슬롯.com/

gacor88

slot gacor

slot thailand

slot demo

slot gacor

slot gacor

https://siakad.poltekbangmedan.ac.id/images/

slot gacor

slot gacor 4d

slot gacor

situs slot gacor

slot gacor

situs slot gacor

https://setda.blorakab.go.id/packages/upload/galeri/

slot demo

rtp slot

slot gacor

slot88

slot gacor

https://plti.amikompurwokerto.ac.id/wp-content/pages/?tunnel=Slot%20Tongkat%20123

slot88

slot-gacor

slot gacor

slot gacor

slot gacor

slot gacor

slot gacor

slot gacor

slot demo

slot88/

https://smartvillage.tubankab.go.id/vendor/

https://manajemen.unik-kediri.ac.id/wp-content/files/-/slot-toto/

https://myexist.muallimaat.sch.id/.well-known/

slot gacor

toto macau

slot gacor

slot gacor

slot gacor hari ini

slot-gacor

slot gacor

http://student.unisbank.ac.id/wp-includes/slot-gacor-hari-ini/

https://keclasem.rembangkab.go.id/error/

https://ak.polnep.ac.id/slot-gacor/

slot thailand

https://pmbtest.akpergshwng.ac.id/data/slot-qris-gacor/

slot gacor 4d

https://elsa.polteksahid.ac.id/elsa/files/slot-gacor-thailand/

https://ppdb.smai-soedirman-kotabekasi.sch.id/assets/

slot-gacor

slot-gacor

olxtoto

slot gacor

slot88

slot gacor

slot gacor

https://roadpowersystems.com/pages/

https://disdikbud.pemkomedan.go.id/assets/css/

slot4d

slot gacor

slot gacor

slot gacor

slot thailand

togel online

slot88

https://diafrica.org/pages/

togel online

slot gacor

https://fkomputer.umku.ac.id/wp-content/plugins/

slot gacor

slot gacor

slot gacor

https://feb.umku.ac.id/wp-includes/

https://fgizi.umku.ac.id/wp-content/languages/

https://fmipa.umku.ac.id/wp-includes/

slot gacor

slot88

slot88

slot gacor

slot gacor

slot gacor

slot gacor

https://fkip.umku.ac.id/wp-content/uploads/

https://fkesehatan.umku.ac.id/wp-content/plugins/

slot gacor

https://fst.umku.ac.id/wp-content/plugins/

https://fkeperawatan.umku.ac.id/wp-content/plugins/

olx toto

https://akparjakarta.ac.id/wp-content/

slot qris

slot qris

slot gacor

slot gacor

slot gopay

slot gacor

https://siakad.poltekbangmedan.ac.id/images/

slot thailand

slot gacor

slot gopay

https://ppdb.smai-soedirman-kotabekasi.sch.id/assets/

https://pmbtest.akpergshwng.ac.id/data/slot-qris-gacor/

https://cbt.dindikbud.pekalongankab.go.id/assets/

slot ovo

https://jdih.pn-labuanbajo.go.id/images/

https://pn-labuanbajo.go.id/wp-content/uploads/

https://fst.umku.ac.id/wp-content/uploads/

slot gacor

slot88

slot gacor

slot gacor

slot gacor

slot88

slot gacor

https://smkpelitanusantara.sch.id/

https://wibs.sch.id/

https://mnis.sch.id/

https://smkm3-alkamal.sch.id/

https://pelitanusantara.sch.id/

slot hoki

slot gacor kamboja

slot777

slot gacor 4d

http://esptpd.kaimanakab.go.id/public/img/

slot gacor

slot gacor

slot server luar

slot gacor

slot demo

slot88

slot hoki

https://api.kelastryout.id/assets/

https://siasuh.poltekbangmedan.ac.id/pedoman/ninjajago/

slot gacor

slot gacor

slot