This course will become read-only in the near future. Tell us at community.p2pu.org if that is a problem.

Envía la información de error de vuelta al formulario



Digamos que queremos cambiar la manera en la que indicamos que hubo un campo en blanco. Ahora, si hay un campo en blanco queremos que en el formulario salga un mensaje como este:

Nombre: |___________|  El nombre no puede estar vacío

Para lograr esto tenemos que mandarle información a la página que contiene el formulario (formulario.php). ¿Cómo hacemos esto? Una manera de hacer esto es pasando la información por el URL. ¿Suena familiar? Es el mismo concepto que se aplica cuando utilizamos el method = "get" del <form>.

Como esta vez la información no proviene de un formulario tenemos que utilizar una función. La función se llama header y lo que nos permite hacer es redireccionar el browser a otra página en nuestro servidor (como el action). Ahora mismo no es importante que sepas como funciona la función  solo es necesario que la aprendas a utilizar. Veamos un ejemplo:

Asumiendo que estamos en receptor.php y queremos ir a formulario.php

<?php
    header("Location: formulario.php");
?>


Un pequeño desglose de la función:

  • header: Es el nombre de la función

  • ("Location: formulario.php") : Es el parámetro de la función. Esta función envía un error si no se le da un parámetro. También pudimos utilizar una variable en vez de escribir el texto directamente. Así:

    • $location = "Location: formulario.php";

    • header ($location);

OJO: header() debe ser llamado antes de mostrar nada por pantalla, etiquetas HTML, líneas en blanco desde un fichero o desde PHP.  Por lo que no debemos hacer algo como esto:

<html>
<body>
    <?php
        header("Location: formulario.php");
    ?>
</body>
</html>

Ya sabemos como volver a la página de formulario, pero cómo le pasamos información? Veamos un ejemplo utilizando el nombre:

Estando en receptor.php

<?php
    $nombre = $_POST["varNombre"];
    //Esta variable indica si hubo un error con el nombre. Si no hay error es 0 y si hay error es 1
    $errorNombre = 0;

    //Esta variable es true si hubo un error en cualquiera de las variables; false si no hubo ningún error
    $huboError = false;

    if ($nombre == "") {
        $errorNombre = 1;
        $huboError = true;
    }

    if ($huboError) {
        header("Location: formulario.php?nombre=$nombre&errorNombre=$errorNombre");
    }
    else {
        echo 'Todos los campos son válidos.';
    }
?> 


Analicemos el ejemplo:

  • Si el nombre está vacío le asignamos el valor " 1 " a $errorNombre para indicar que hubo un error en el nombre.
  • La variable $huboError es un booleano (boolean) este tipo de dato puede tener un valor de true o false (cierto o falso). En este ejemplo, le asignamos un valor de true cuando se da un error en cualquier campo, si no, mantiene el valor false que se le asignó originalmente.
  • Verificamos si hubo algún error " if ($huboError) ", si hubo error enviamos la información a formulario.php.
    • Cabe destacar que escribir " if ($huboError) " es lo mismo que escribir " if ($huboError == true) ", pero la primera es más corta y muchos prefieren hacerlo de esa manera. Para comparar con false sería " if (!$huboError) ".


OJO: Por ahora, lo único que estamos haciendo es mandarle información a formulario.php indicándole si hubo o no un error. Para que se muestre el error (en letras rojas) en formulario.php tenemos que modificar el código allá para que utilice esta información que le estamos enviando.


Para completar esta tarea:

  1. Modifica receptor.php para que valide cada uno de los campos y envíe información de vuelta a formulario.php.
  2. Recuerda que queremos saber que campos tienen data y cuales están vacíos
  3. Prueba tu código! Ahora mismo formulario.php no hace nada con la información que mandas, pero puedes revisar que todo esta funcionando revisando el URL.
  4. Revisa que cuando mandas campos vacíos tus variables de error lo indiquen.
    • A las finales debes quedar con un código como este.
    • Ahora tu formulario se debe comportar así

Task Discussion