Lenguaje PHP

Validación de Formularios con PHP [Ejemplo Completo]

Form Validation PHP Full Example

Validación de Formularios con PHP. En los formularios web algunos de los campos son importantes y es necesario que lo validemos para que no estén vacíos y tengan los valores que deseamos como los correos electrónicos, números telefónicos, edad, fechas, etc. Por lo tanto, en este artículo veremos una estrategia para validar los formularios de manera correcta usando PHP y sus funciones por defecto.

Validación de Formularios con PHP

Usaremos las siguientes herramientas

  • Lenguaje PHP
  • Una función PHP
  • Formulario HTML
  • Librería BootStrap 4.5
  • Filtro FILTER_VALIDATE_EMAIL

Para validar usaremos un script PHP del lado del servidor se utiliza para manejar los datos ingresados por los usuarios. Ahora, usaremos PHP para validar los datos y devolver los mensajes de error en los inputs y detenga en envío para la corrección.

Ver Demo
Validación de Formularios con PHP [Ejemplo Completo]
Validación de Formularios con PHP [Ejemplo Completo]

Validación de formularios con PHP y componentes PHP

Los formularios se utilizan principalmente para recopilar datos ingresados por el usuario en el sistema.

Hay diferentes componentes como cuadro de texto, botones de radio, casilla de verificación, cuadro combinado o cuadros de lista desplegable para que los usuarios ingresen datos en un sistema.

¿Cómo validar el correo electrónico?

Este campo suele ser complicado para realizar una validación porque tenemos que validad puntos y arrobas para que sea validado. Sin embargo, PHP nos hace la vida fácil porque posee una función llamada “FILTER_VALIDATE_EMAIL” que nos hace la tarea muy fácil, veamos un ejemplo de uso.

$email = validar_input($_POST["email"]);
// Verifica el correcto formato de email
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$emailErr = "Formato de email invalido";
}

Formulario del ejemplo

Para este ejemplo usaremos un formulario HTML con incrustación de variables, condicionales para devolver resultados en caso de error de validación.

<form method="post" action="<?php 
echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> 
<div class="form-group">
<label class="col-form-label"><span class="error">* </span>Nombre</label>
<input name="nombre" type="text" class="form-control" value="<?php if (!empty($_POST["nombre"])) {
echo $nombre; }else {echo "";}?>">
<span class="error invalid-feedback"> <?php echo $nombreErr;?></span>
</div>
<div class="form-group">
<label class="col-form-label"><span class="error">* </span>Email</label>
<input name="email" type="text" class="form-control" value="<?php if (!empty($_POST["email"])) {
echo $email; }else {echo "";}?>">
<span class="error invalid-feedback"> <?php echo $emailErr;?></span>

</div>
<div class="form-group">
<button class="btn btn-primary btn-block" name="submit">Enviar</button>
</div>
</form>

Validación PHP del Formulario

EL usuario al enviar el formulario se ejecuta el siguiente script PHP en el cual verificara que los dos campos enviados por el formulario cumplan con los requisitos requeridos.

 <?php
// Definir variables
$nombreErr = $emailErr = "";
$nombre = $email = "";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["nombre"])) {
$nombreErr = "Nombre es requerido";
}else {
$nombre = validar_input($_POST["nombre"]);
} 

if (empty($_POST["email"])) {
$emailErr = "Email es requerido";
}else {
$email = validar_input($_POST["email"]); 
// Verifica el correcto formato de email
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$emailErr = "Formato de email invalido"; 
}
}
} 

Función limpiar caracteres especiales

Para proteger nuestros formularios hay varias estrategias. Por lo tanto, como sabrás hay personas que usan los formularios para ejecutar inyecciones SQL.

Además, usaremos el método POST PHP.

Ahora, si bien este script sirve para validar que los campos no estén vacíos, no se salvan de los ataques. Sin embargo, esta función PHP se encarga de limpiar caracteres especiales en nuestro formulario.

function validar_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}

Respuesta del envío de formulario

Si, el envío paso todas las validaciones en PHP se mostrará resultados al final del formulario con los valores correctos según la necesidad del programador.

Sin embargo, también en esta sección se podría validar para envío de la información a las siguientes secciones:

if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($nombreErr) and empty($emailErr)) {
echo "<br><h6>Tus valores son:</h6>";
echo "<strong>Nombre</strong>: ".$nombre;
echo "<br>";
echo "<strong>Email</strong>: ".$email;
echo "<br>";
}
}

Código fuente completo del script

Aquí, les dejare el script completo donde están todos los procesos de validación y respuestas dentro del formulario en el caso que algún campo sea erróneo y deba corregirse según sea el caso.

Para el correcto funcionamiento del script, les dajaré la librería BooStrap 4.5

<html>
<head>
<meta charset="utf-8">
<title>Validacion de formulario con PHP</title>
<link rel="stylesheet" href="css/bootstrap.min.css">
<style>
.error {color: #FF0000;}
.invalid-feedback{ display:block !important}
</style>

</head>
<body>
<?php
// Definir variables
$nombreErr = $emailErr = "";
$nombre = $email = "";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["nombre"])) {
$nombreErr = "Nombre es requerido";
}else {
$nombre = validar_input($_POST["nombre"]);
}

if (empty($_POST["email"])) {
$emailErr = "Email es requerido";
}else {
$email = validar_input($_POST["email"]);
// Verifica el correcto formato de email
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$emailErr = "Formato de email invalido";
}
}
}
function validar_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>
<div class="container">
<br>
<div class="card bg-light">
<div class="card-header">
Formulario de registro con validación
</div>
<div class="card-body">
<span class = "error">* Campos requeridos.</span>
<div class="row">
<div class="col-md-6">
<form method="post" action="<?php
echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
<div class="form-group">
<label class="col-form-label"><span class="error">* </span>Nombre</label>
<input name="nombre" type="text" class="form-control" value="<?php if (!empty($_POST["nombre"])) {
echo $nombre; }else {echo "";}?>">
<span class="error invalid-feedback"> <?php echo $nombreErr;?></span>
</div>
<div class="form-group">
<label class="col-form-label"><span class="error">* </span>Email</label>
<input name="email" type="text" class="form-control" value="<?php if (!empty($_POST["email"])) {
echo $email; }else {echo "";}?>">
<span class="error invalid-feedback"> <?php echo $emailErr;?></span>

</div>
<div class="form-group">
<button class="btn btn-primary btn-block" name="submit">Enviar</button>
</div>
</form>
</div>

</div>
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($nombreErr) and empty($emailErr)) {
echo "<br><h6>Tus valores son:</h6>";
echo "<strong>Nombre</strong>: ".$nombre;
echo "<br>";
echo "<strong>Email</strong>: ".$email;
echo "<br>";
}
}
?>
</div>
</div>
</div>
</body>
</html>

CONCLUSIÓN

La validación de formularios suele ser complicado porque existe varias formas de hacerlos, algunos suelen validad con JavaScript, como sabrán este lenguaje trabaja al lado del cliente (Navegador web) y suele ser inseguro.

Es recomendable validarlo para mayor seguridad desde el lado del servidor y PHP cumple estos requisitos.

Como han apreciado, las implementaciones de estas validaciones no son complicadas y en este artículo hemos detallado punto a punto.

Espero que esta breve explicación les ayude en sus proyectos web,

Nestor Tapia

Bloggero, amante de la programación PHP, innovador y me fascina compartir información. Desde que conocí el entorno informatico y el internet me llamó la atención la programación, Por tal motivo he creado mi blog BAULPHP.COM para compartir mis experiencias con todos ustedes. ¡Gracias por leerme!.

9 comentarios

  1. <?php
    if(filter_input(INPUT_POST['submit'])){

    //Recoger los formularios del registro
    $nombre = filter_input(INPUT_POST['nombre']) ? INPUT_POST['nombre'] : false;
    $apellidos = filter_input(INPUT_POST['apellidos']) ? INPUT_POST['apellidos'] : false;
    $email = filter_input(INPUT_POST['email']) ? INPUT_POST['email'] : false;
    $password = filter_input(INPUT_POST['password']) ? INPUT_POST['password'] : false;

    // Validar los datos antes de guadar en la base de datos
    if(!empty($nombre) && !is_numeric($nombre) && !preg_match("/[10-09]/", $nombre)){
    echo "el nombre es valido";
    }else{
    echo "el campo es malo";
    }
    }
    es para validar un formulario pero algo me esta faltando ?¿

  2. Hola buen dia, tengo una duda utilice este codigo tuyo, pero yo redireccione a otra si todo esta bien en el formulario,
    el problema esta que no me llegan las variables en el otro formulario, ya que el codigo normal que yo he utilizado
    anteriormente es este, me refiero al action ahi coloco que pagina recibira
    y en tu codigo es esto <form method="post" action="”>
    en que parte del codigo debo colocar la pagina que va a recibir los datos del form, saludos

    1. Hola mario

      Si, para enviar la informacion se debe de declarar un archivo PHP:

      < form method="post" action="mis-validaciones.php" >

      En el fichero mis-validacones.php ahi se recuperara o procesara la información enviada desde el formulario en variables PHP. Sin embargo, esas variables puedes mostrarlo en otro formulario y/o insertar en una base de datos.

      1. pero en este ejemplo que tienes en el action tienes otro tipo de codigo, que generalmente ahi pongo yo la pagina que enviara los datos, yo para redireccionar la pagina hice esto
        if ($_SERVER[“REQUEST_METHOD”] == “POST”) {
        if (empty($nombreErr) and empty($emailErr)) {
        header(“Location: pagina2.php”);
        }
        pero en la pagina2.php no me llegan el email ni nombre, si me podrias ayudar, saludos

        1. Al recibir la informacion del formulario no se debe aplicar redireccion. header(“Location: pagina2.php”);, a menos que lo envies la informacion con el metodo GET.
          Ejemplo:
          header(“Location: pagina2.php?nombre=$variable”);

          En el presente articulo se uso una funcion PHP htmlspecialchars($_SERVER[“PHP_SELF”]); que significa que la informacion enviada en el formulario se procesara en la misma pagina donde esta el formulario.

          Por lo tanto, si se desea que la informacion sea procesada en otro archivo se debe de declarar ese archivo en el atributo “action”.

          1. y no hay manera de hacer la validacion del formulario y enviar dicho datos del formulario a otro archivo? por que si lo hago con el action no me valida el formulario, disculpa por las preguntas pero soy nuevo en esto

  3. hola Nestor como estas, tienes buenos ejemplos sigue asi mis felicitaciones.
    quiero hacerte una consulta tecnica:
    tengo un formulario con un campo codigoproducto y necesito mostrar los datos del producto sin que el formulario se refresque nuevamente, es obvio que tengo que tener otro archivo php donde debe estar la consulta, mi tema es como recupera esos datos en mi formulario donde estan los input.
    espero que me ayudes. muchas gracias.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba