PHP (06) Validaciones (03) Datos persistentes

Imaginemos que tenemos un formulario con diferentes campos, y que el usuario envía solo uno, o que uno es correcto y el otro no, para ello podemos mostrar de nuevo los datos que ha enviado el usuario y que son correctos.
Para ello, basandonos en nuestro script de base podemos crear el siguiente:

<html>
 <head>
  <title>
  Comprobación de datos requeridos
  </title>
 </head>
 <body>
  <h1>Comprobación de datos requeridos</h1>
  <?php
  /*
  Comenzamos buscando si visto esta activo, y vamos llamando a las
  funciones correspondientes para controlar el formulario
  */
   $errors_array = array();
   if(isset($_REQUEST["visto" ])){
    comprobarDatos();
    if(count($errors_array) != 0){
     mostrarErrores();
     mostrarInicio();
    }
    else {
     respuesta();
    }
   }
   else {
    mostrarInicio();
   }
   /*
   Muestra el formulario
   */
   function mostrarInicio()
   {
    $nombre = isset($_REQUEST["first"]) ? $_REQUEST["first"] : "";
    $apellido = isset($_REQUEST["last"]) ? $_REQUEST["last"] : "";
    echo "<form method='post'>" ;
    echo "<p>¿Cuál es su nombre?</p>" ;
    echo "<input name='first' type='text' value='". $nombre . "'>" ;
    echo "<p>¿Cuál es su apellido?</p>" ;
    echo "<input name='last' type='text' value='". $apellido . "'>" ;
    echo "<input type='submit' value='Enviar'>" ;
    echo "<input type='hidden' name='visto' value='already_seen'>" ;
    echo "</form>" ;
   }
   /*
   Comprueba que el campo de texto no este en blanco, de ser así introduce un mensaje
   en el array global
   */
   function comprobarDatos()
   {
    global $errors_array;
    if($_REQUEST["first" ] == "" ) {
     $errors_array[] = "<font color='red'>Indique su nombre</font>" ;
    }
    if($_REQUEST["last" ] == "" ) {
     $errors_array[] = "<font color='red'>Indique su apellido</font>" ;
    }
   }
   /*
   recoge los errores del array global, lo recorre y muestra su contenido
   */
   function mostrarErrores()
   {
    global $errors_array;
    foreach ($errors_array as $err){
     echo '<p>' . $err . '</p>';
    }
   }
   /*
   Muestra la respuesta del servidor cuando todo esta correcto
   */
   function respuesta()
   {
    echo "Su nombre es: ";
    echo $_REQUEST["first"];
    echo '<p></p>Y su apellido: ';
    echo $_REQUEST["last"];
   }
   ?>
 </body>
</html>

Este script que ya nos es conocido, tiene algunas modificaciones interesantes pero sencillas, por ejemplo:

  • En la función mostrarInicio() vemos que aparecen dos líneas de código nuevas, las cuales se encargan de  recoger en dos variables si ya ha sido enviado el formulario y de poner en lugar del campo como value del input el valor recogido, o en caso de que no haya nada poner el valor de cadena vacía.
$nombre = isset($_REQUEST["first"]) ? $_REQUEST["first"] : "";
$apellido = isset($_REQUEST["last"]) ? $_REQUEST["last"] : "";
  • En la función comprobarDatos() aparecen dos if, uno por cada campo del formulario y añadiendo al array de errores cada uno el error que puede incluir
  • Finalmente en respuesta se muestran los datos con el formato que deseemos de la forma habitual.