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 DemoValidació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:
- Base de datos MySQL
- Envío de la información vía email usando la librería PHPMailer
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,
<?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 ?¿
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
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.
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
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».
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
muy buen ejemplo, me ayudo mucho para realizar una tarea que me requirieron en el trabajo, excelente 😀
Gracias Alex
Me alegra mucho, saludos.
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.