informaticaPC

Tutorial de PHP

Validar formularios en PHP

Validar en PHP los datos recibidos de un formulario

Hasta ahora hemos visto unas cuantas cosas a tener en cuenta a la hora de procesar un formulario en PHP, pero aún hay otras dos que deberemos tener en cuenta:

  • Aunque hayamos recibido todos los campos requeridos tendremos que comprobar si los tipos de datos de dichos valores se corresponden con los esperados (si esperamos un valor numérico que no hayan letras u otros símbolos, por ejemplo).

    Para ello podemos usar las funciones empty(), is_bool(), is_string(), is_int(), is_float(), is_numeric() e is_null().

  • En caso de valores de tipo string hemos de tener en cuenta si admitiremos como válida una cadena vacía, si puede contener números y caracteres especiales o no, y si estos necesitan ser escapados.

    Para ello podemos usar expresiones regulares y funciones funciones como addslashes(), stripslashes(), htmlspecialchars(), htmlentities(), htmlspecialchars_decode() y html_entity_decode().

    Para comprobar si el valor es un número o una cadena numérica (como en sucede en los formularios) debes usar la función de PHP is_numeric() en vez de is_int() o is_float().

Por último, recuerda que en las siguientes comparaciones se devuelve true (con lo cual se cumplirían las condiciones):

  • if( "" == false )
  • if( 0 == false )
  • if( null == false )

Esto es así porque el operador de comparación == se usa para comprobar que los valores sean iguales (y en los casos anteriores PHP los considera así): por ello, para evitar posibles errores, en ocasiones será más conveniente usar === que devolverá true sólo sin ambos valores son iguales y además del mismo tipo de dato (que ambos sean números, cadenas de texto, etc.).

A continuación te mostramos un completo ejemplo (en este caso con un archivo .html y otro archivo .php con el código fuente necesario para validar el formulario).

Código PHP:

<?php
    // Arrays para guardar mensajes y errores:
    $aErrores = array();
    $aMensajes = array();

    // Patrón para usar en expresiones regulares (admite letras acentuadas y espacios):
    $patron_texto = "/^[a-zA-ZáéíóúÁÉÍÓÚäëïöüÄËÏÖÜàèìòùÀÈÌÒÙ\s]+$/";

    // Comprobar si se ha enviado el formulario:
    if( !empty($_POST) )
    {
        echo "FORMULARIO RECIBIDO:<br/>";
        echo "====================<p/>";

        // Mostrar la información recibida del formulario:
        print_r( $_POST );
        echo "<hr/>";

        // Comprobar si llegaron los campos requeridos:
        if( isset($_POST['txtNombre']) && isset($_POST['txtApellidos']) )
        {
            // Nombre:
            if( empty($_POST['txtNombre']) )
                $aErrores[] = "Debe especificar el nombre";
            else
            {
                // Comprobar mediante una expresión regular, que sólo contiene letras y espacios:
                if( preg_match($patron_texto, $_POST['txtNombre']) )
                    $aMensajes[] = "Nombre: [".$_POST['txtNombre']."]";
                else
                    $aErrores[] = "El nombre sólo puede contener letras y espacios";
            }

            // Apellidos:
            if( empty($_POST['txtApellidos']) )
                $aErrores[] = "Debe especificar los apellidos";
            else
            {
                // Comprobar mediante una expresión regular, que sólo contienen letras y espacios:
                if( preg_match($patron_texto, $_POST['txtApellidos']) )
                    $aMensajes[] = "Apellidos: [".$_POST['txtApellidos']."]";
                else
                    $aErrores[] = "Los apellidos sólo pueden contener letras y espacios";
            }

            // Edad:
            if( (isset($_POST['txtEdad']) ) && (!empty($_POST['txtEdad'])) )
            {
                if( is_numeric($_POST['txtEdad']) )
                    $aMensajes[] ="Edad: [".$_POST['txtEdad']."]";
                else
                    $aErrores[] = "El campo edad debe contener un número.";
            }

            // Inglés:
            if( isset($_POST['radIngles']) )
                $aMensajes[] = "El nivel de inglés es: [".$_POST['radIngles']."]";

            // Coche:
            if( isset($_POST['chkCoche']) )
            {
                /*
                    No hace falta comprobar el valor de la casilla de verificación, ya que si
                    está definido 'chkCoche' es que se ha marcado (al igual que sucede con
                    los botones radio)
                */
                $aMensajes[] = "Coche: [SI]";
            }
        }
        else
        {
            echo "<p>No se han especificado todos los datos requeridos.</p>";
        }

        // Si han habido errores se muestran, sino se mostrán los mensajes
        if( count($aErrores) > 0 )
        {
            echo "<p>ERRORES ENCONTRADOS:</p>";

            // Mostrar los errores:
            for( $contador=0; $contador < count($aErrores); $contador++ )
                echo $aErrores[$contador]."<br/>";
        }
        else
        {
            // Mostrar los mensajes:
            for( $contador=0; $contador < count($aMensajes); $contador++ )
                echo $aMensajes[$contador]."<br/>";
        }
    }
    else
    {
        echo "<p>No se ha enviado el formulario.</p>";
    }

    echo "<p><a href='03_form3.html'>Haz clic aquí para volver al formulario</a></p>";
?>

Código HTML:

<html>

    <head>
        <title>Curso de PHP - ejemplo de formulario | informaticapc.com</title>
    </head>

    <body>

        <!-- También habría que validar en el ordenador del usuario mediante JavaScript -->

        <form name="frmPrueba" method="post" action="03_form3.php" >

            Nombre(*):    <input type="text" name="txtNombre" id="txt1" />
            Apellidos(*): <input type="text" name="txtApellidos" id="txt2" />
            Edad:		 <input type="text" name="txtEdad" id="txt3" size="3" maxlength="2" /><p/>

            Nivel de inglés:
            <input type="radio" name="radIngles" value="BAJO" /> Bajo
            <input type="radio" name="radIngles" value="MEDIO" /> Medio
            <input type="radio" name="radIngles" value="ALTO" /> Alto<p/>

            <input type="checkbox" name="chkCoche" value="1" /> ¿Coche?<p/>

            <input type="submit" name="btnEnviar" value="Enviar Formulario" />

        </form>

    </body>

</html>

Descargar ejemplo

Al cargar el archivo archivo .html se mostrará el siguiente formulario:

Validación de formularios

Tras rellenar los datos y enviar el formulario veremos algo como:

Validar formulario

En caso de introducir un valor no válido se mostrará un mensaje de error (por ejemplo al escribir letras en el campo Edad):

Validar un formulario

Más información

Vea también: [ Información tipos de datos ] - [ empty() ] - [ is_bool() ] - [ is_string() ] - [ is_numeric() ] - [ is_int() ] - [ is_float() ]

Más información

Vea también: [ addslashes() ] - [ stripslashes() ]

Primera página Anterior Siguiente Última página
Usamos cookies para ofrecerte una experiencia mejorada, el continuar navegando supone que aceptas su uso