Módulo 4: Fundamentos de PHP

Manejo de formularios en PHP

Lección 18 de 33 del Curso Roadmap Learning Laravel

Duración: 1 hora
Nivel: Principiante (requiere conocimientos de HTML, CSS, JavaScript, y PHP básico: variables, condicionales, funciones)
Objetivo: Aprender a manejar formularios en PHP usando los métodos GET y POST, procesar datos enviados por el usuario, y mostrar resultados dinámicos, como preparación para formularios en Laravel.
Materiales necesarios:

  • Computadora con:
    • Servidor local (XAMPP, WAMP, o MAMP, descarga gratuita desde sus sitios oficiales).
    • Editor de texto (recomendado: VS Code, descarga gratuita desde code.visualstudio.com).
  • Navegador web (Chrome, Firefox, etc.).
  • Alternativa: Usa un entorno online como Repl.it (repl.it/languages/php) o PHPFiddle (phpfiddle.org).
    Contexto: Esta lección enseña cómo PHP procesa datos de formularios HTML, una habilidad esencial para crear aplicaciones web dinámicas, como formularios de registro o contacto en Laravel.

Introducción a formularios en PHP (10 minutos)

Explicación:

Los formularios HTML permiten a los usuarios enviar datos (como nombres o edades) al servidor, donde PHP los procesa para generar respuestas dinámicas (por ejemplo, mostrar un mensaje o guardar datos).

Componentes clave:

  • Formulario HTML: Usa la etiqueta <form> con:
    • action: URL del script PHP que procesa los datos (puede ser el mismo archivo).
    • method: Método de envío (GET o POST).
  • PHP: Recupera los datos enviados y los procesa.

Métodos de envío:

  • GET:
    • Envía datos en la URL (por ejemplo, pagina.php?nombre=Ana).
    • Visible, limitado en tamaño, usado para búsquedas o datos no sensibles.
    • Acceso en PHP: $_GET["nombre"].
  • POST:
    • Envía datos en el cuerpo de la solicitud (no visible en la URL).
    • Más seguro, soporta más datos, usado para formularios sensibles (como contraseñas).
    • Acceso en PHP: $_POST["nombre"].

Por qué es importante:

  • Procesar formularios es fundamental en Laravel para manejar datos de usuarios, como registros o comentarios, en vistas Blade y controladores.

Ejemplo básico:

<form action="procesar.php" method="post">
    <input type="text" name="nombre">
    <button type="submit">Enviar</button>
</form>

Punto clave: GET y POST determinan cómo los datos llegan al servidor, y PHP los procesa para generar contenido dinámico.

Actividad rápida (2 minutos):

Piensa en un formulario que hayas usado (por ejemplo, un login). Escribe en papel si usaría GET o POST y por qué. Ejemplo:

  • Login → POST, porque los datos (contraseña) son sensibles.

Métodos GET y POST en acción (15 minutos)

Explicación:

Aprendamos a crear formularios y procesar datos con GET y POST.

Estructura de un formulario:

  • <input name="clave">: El atributo name define la clave para $_GET o $_POST.
  • action="script.php": Especifica el archivo PHP que procesa el formulario.
  • Si action="" o está vacío, el formulario se envía al mismo archivo.

Procesamiento en PHP:

  • GET:
    $dato = $_GET["clave"];
    echo "Dato recibido: $dato";
  • POST:
    $dato = $_POST["clave"];
    echo "Dato recibido: $dato";

Precauciones:

  • Verifica si los datos existen con isset($_POST["clave"]) para evitar errores.
  • Escapa datos para seguridad (introducido aquí, detallado en lecciones futuras).

Ejemplo práctico (como pide la lección):

Formulario que recibe un nombre y lo muestra:

<!DOCTYPE html>
<html lang="es">
<head>
    <title>Procesar Nombre</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            max-width: 600px;
            margin: 20px auto;
            text-align: center;
        }
        input, button {
            padding: 8px;
            margin: 5px;
            font-size: 1rem;
        }
        button {
            background-color: #2c3e50;
            color: white;
            border: none;
            cursor: pointer;
        }
        .resultado {
            margin-top: 20px;
            font-weight: bold;
        }
    </style>
</head>
<body>
    <h1>Ingresa tu Nombre</h1>
    <form method="post" action="">
        <input type="text" name="nombre" placeholder="Tu nombre">
        <button type="submit">Enviar</button>
    </form>
    <?php
    if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST["nombre"])) {
        $nombre = htmlspecialchars($_POST["nombre"]);
        if ($nombre !== "") {
            echo "<p class='resultado'>Hola, $nombre!</p>";
        } else {
            echo "<p class='resultado'>Por favor, ingresa un nombre.</p>";
        }
    }
    ?>
</body>
</html>

Cómo funciona:

  • <form method="post" action="">: Usa POST, procesa en el mismo archivo.
  • <input name="nombre">: Captura el nombre.
  • $_SERVER["REQUEST_METHOD"] == "POST": Verifica que el formulario fue enviado.
  • isset($_POST["nombre"]): Confirma que el campo existe.
  • htmlspecialchars(): Escapa caracteres para evitar problemas de seguridad (como XSS).
  • Condicional: Muestra el nombre o un mensaje de error si está vacío.

Cómo probarlo:

  1. Con XAMPP:
    • Guarda como nombre.php en htdocs.
    • Accede: http://localhost/nombre.php.
  2. Con Repl.it: Pega el código y ejecuta.
  3. Prueba:
    • Ingresa "Ana" → "Hola, Ana!".
    • Deja vacío → "Por favor, ingresa un nombre.".
    • Ingresa "<script>" → Texto escapado, no ejecutado.
  4. Revisa la consola del servidor (php_error.log en XAMPP) si hay errores.

Resultado esperado:

  • Un formulario simple con un campo y botón.
  • Al enviar, muestra un mensaje personalizado o un error si está vacío.

Punto clave: POST es ideal para formularios, y PHP permite procesar datos de forma segura y dinámica, como en Laravel.

Actividad rápida (3 minutos):

Modifica el ejemplo (en papel o editor) para usar GET en lugar de POST. Solución sugerida:

<form method="get" action="">
<!-- ... -->
if ($_SERVER["REQUEST_METHOD"] == "GET" && isset($_GET["nombre"])) {
    $nombre = htmlspecialchars($_GET["nombre"]);

Procesamiento de datos y buenas prácticas (15 minutos)

Explicación:

Procesar datos implica validar, limpiar, y usar la información enviada.

Buenas prácticas:

  • Validación:
    • Verifica campos vacíos: if (empty($dato)).
    • Comprueba formatos (por ejemplo, números con is_numeric()).
  • Seguridad:
    • Usa htmlspecialchars() para evitar inyecciones XSS.
    • Evita mostrar datos crudos ($_POST["dato"]) sin filtrar.
  • Persistencia:
    • Mantén los valores del formulario tras el envío para mejor experiencia:
      <input name="nombre" value="<?php echo isset($_POST['nombre']) ? htmlspecialchars($_POST['nombre']) : ''; ?>">
  • Método adecuado:

    • Usa POST para datos sensibles o largos.
    • Usa GET para búsquedas o filtros visibles.

Ejemplo avanzado:

Añadir validación de longitud al nombre:

if (isset($_POST["nombre"])) {
    $nombre = htmlspecialchars($_POST["nombre"]);
    if ($nombre === "") {
        echo "<p class='resultado'>Nombre vacío.</p>";
    } elseif (strlen($nombre) < 2) {
        echo "<p class='resultado'>El nombre debe tener al menos 2 caracteres.</p>";
    } else {
        echo "<p class='resultado'>Hola, $nombre!</p>";
    }
}

Punto clave: Procesar datos con validación y seguridad es esencial en Laravel para manejar formularios de forma robusta.

Actividad rápida (3 minutos):

Escribe en papel o editor cómo añadirías un mensaje si el nombre tiene más de 20 caracteres. Solución sugerida:

elseif (strlen($nombre) > 20) {
    echo "<p class='resultado'>El nombre es demasiado largo.</p>";
}

Resumen y preparación para la tarea (20 minutos)

Resumen:

  • Formularios: Conectan HTML (<form>) y PHP ($_GET, $_POST).
  • GET: Datos en la URL, para búsquedas simples.
  • POST: Datos seguros, para formularios complejos.
  • Procesamiento: Validar, limpiar, y mostrar datos con PHP.
  • Ejemplo: Formulario que muestra un nombre con validación básica.
  • Estos conceptos son la base para formularios en Laravel, como registros o contactos.

Preparación para la tarea:

La tarea pide crear un formulario PHP que reciba una edad y muestre si el usuario es mayor de edad (≥18).

  • Estrategia:
    • Crea un formulario HTML con un campo numérico (<input type="number">).
    • Usa POST para procesar la edad.
    • Valida que la edad sea un número y no esté vacía.
    • Usa un condicional (if) para determinar si es mayor de edad.
    • Muestra el resultado con echo.
  • Lógica básica:
    if (isset($_POST["edad"]) && is_numeric($_POST["edad"])) {
        $edad = (int)$_POST["edad"];
        if ($edad >= 18) {
            echo "Eres mayor de edad.";
        } else {
            echo "Eres menor de edad.";
        }
    }

Punto clave: La tarea refuerza el manejo de formularios y condicionales, habilidades clave para procesar datos en Laravel.


Tarea práctica: Crea un formulario PHP que reciba edad y muestre si es mayor de edad

Instrucciones:

  1. Crea un programa PHP con un formulario que reciba la edad del usuario.
  2. Usa:
    • Un formulario HTML con method="post".
    • Un campo <input type="number" name="edad">.
    • PHP para procesar la edad con $_POST.
    • Un condicional para verificar si la edad es ≥18.
    • echo para mostrar el resultado (por ejemplo, "Eres mayor de edad").
  3. Asegúrate de:
    • Validar que el campo no esté vacío y sea numérico.
    • Mostrar un mensaje de error si la entrada es inválida.
    • Incluir estilos básicos con CSS.
  4. Usa el siguiente código como guía:
<!DOCTYPE html>
<html lang="es">
<head>
    <title>Verificar Edad</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            max-width: 600px;
            margin: 20px auto;
            text-align: center;
        }
        h1 {
            color: #2c3e50;
        }
        input, button {
            padding: 10px;
            margin: 5px;
            font-size: 1rem;
        }
        button {
            background-color: #2c3e50;
            color: white;
            border: none;
            cursor: pointer;
        }
        .resultado {
            margin-top: 20px;
            font-weight: bold;
        }
        .error {
            color: red;
        }
    </style>
</head>
<body>
    <h1>Verifica tu Edad</h1>
    <form method="post" action="">
        <label for="edad">Edad:</label>
        <input type="number" name="edad" id="edad" placeholder="Tu edad" value="<?php echo isset($_POST['edad']) ? htmlspecialchars($_POST['edad']) : ''; ?>">
        <button type="submit">Verificar</button>
    </form>
    <?php
    if ($_SERVER["REQUEST_METHOD"] == "POST") {
        if (isset($_POST["edad"]) && $_POST["edad"] !== "" && is_numeric($_POST["edad"])) {
            $edad = (int)$_POST["edad"];
            if ($edad >= 0) {
                if ($edad >= 18) {
                    echo "<p class='resultado'>Eres mayor de edad.</p>";
                } else {
                    echo "<p class='resultado'>Eres menor de edad.</p>";
                }
            } else {
                echo "<p class='error'>La edad no puede ser negativa.</p>";
            }
        } else {
            echo "<p class='error'>Por favor, ingresa una edad válida.</p>";
        }
    }
    ?>
</body>
</html>
  1. Prueba el archivo:
    • Con XAMPP:
      • Guarda como edad.php en htdocs.
      • Accede: http://localhost/edad.php.
    • Con Repl.it: Pega el código y ejecuta.
    • Prueba:
      • Ingresa 25 → "Eres mayor de edad.".
      • Ingresa 15 → "Eres menor de edad.".
      • Ingresa texto o vacío → "Por favor, ingresa una edad válida.".
      • Ingresa -5 → "La edad no puede ser negativa.".
    • Revisa php_error.log (en XAMPP) para depurar errores.

Ejemplo de solución esperada:

El código anterior es funcional. En el navegador:

  • Un formulario con un campo numérico estilizado.
  • Al enviar, muestra si el usuario es mayor o menor de edad, o un error si la entrada es inválida.
  • El valor ingresado persiste tras el envío.

Tiempo estimado: 20-30 minutos (puedes hacerlo después de la lección).
Entregable: Archivo edad.php que procese la edad y muestre el resultado. Puedes compartir el código o describirlo para que lo revise.

Consejo: Prueba con casos extremos (0, 18, 17) y asegúrate de que los estilos sean claros en móviles.

Evaluación de Conocimientos: Manejo de Formularios en PHP

¡Es momento de evaluar tus conocimientos sobre el manejo de formularios en PHP! Este examen consta de 10 preguntas con opciones múltiples que cubren temas clave como los métodos GET y POST, el procesamiento de datos y la validación básica. Contesta con atención y demuestra tu comprensión de cómo trabajar con formularios en PHP. ¡Buena suerte!

1. ¿Qué método de formulario envía datos visibles en la URL?

2. En el ejemplo de la lección, ¿qué variable PHP se usó para procesar el nombre enviado?

3. ¿Qué atributo HTML del formulario especifica el archivo PHP que procesa los datos?

4. En la tarea, ¿qué condición determinaba si el usuario es mayor de edad?

5. ¿Qué función PHP se usó para evitar problemas de seguridad como XSS en el ejemplo?

6. ¿Qué superglobal PHP verifica el método de envío del formulario (GET o POST)?

7. En la tarea, ¿qué tipo de input HTML se recomendó para la edad?

8. ¿Qué función PHP verifica si un campo del formulario está definido?

9. En el ejemplo, ¿cómo se mantuvo el valor del campo nombre tras enviar el formulario?

10. ¿Qué método es más adecuado para enviar datos sensibles como contraseñas?

© Copyright Cursos Laravel :: 2025 Términos y condiciones