Está en la página 1de 4

[Tutorial] validar formulario en php

Hola en este articulo vamos a ver como validar las un formulario que contiene varios campos,
antes de insertar estos datos a una base datos MYSQL

para esto necesitamos un servidor web, vamos a usar el combo apache, mysql y php

FORMULARIO HTML INDEX.PHP



<h2>Registrate</h2>
<form action="" method="POST">



primero creamos un form al que le damos un atributo action = " " lo que significa que al
presionar el boton submit el archivo va a enviarse a la misma pagina que tiene el form, otra
opcin tambin es poner el nombre del archivo form action="index.html"



<p><label for="username">Username: </label><br>

<input type="text" name="username"></p>



<p><label for="email">Email: </label><br>

<input type="text" name="email"></p>

<p><label for="pass1">Password: </label><br>

<input type="password" name="pass"></p>

<p><label for="pass">Repite el password: </label><br>

<input type="text" name="email"></p>

<p><label for="web">Ingresa tu sitio web: </label><br>

<input type="text" name="web"></p>

<p><input type="submit" value="Registrarse"></p>

</form>



Agregamos varios input, cada uno con un atributo name, que es el que va a recibir php a la
hora de validar los datos. la mayora lleva el input type="text", excepto el password que cambia
a justamente password, la diferencia entre estos es que a la hora de escribir el password el
texto no se muestra de manera directa

otro campo diferente es el ultimo que tiene un atributo type igual a submit, este es el que se
encarga de enviar el formulario.

a la hora de validar los datos lo primero que hay que hacer es verficar si se presiono el boton
submit



<?php

<?php
if(isset($_POST["submit"])){

$username = trim(htmlentities(mysql_real_escape_string($_POST["username"])));
$email = trim(htmlentities(mysql_real_escape_string($_POST["email"])));
$pass1 = trim(htmlentities(mysql_real_escape_string($_POST["pass1"])));
$pass2 = trim(htmlentities(mysql_real_escape_string($_POST["pass2"])));
$web = trim(htmlentities(mysql_real_escape_string($_POST["web"])));

$response = array();

}
?>



con la funcion isset verficamos si se envi el formulario mediante el metodo POST , despues
creamos 5 variables que contienen los datos que el usuario nos envi, ademas usamos la
funcin trim que se encarga de eliminar los espacios en blanco que el usuario puede dejar en
los campos de entrada, ademas agregamos la funcin mysql_real_escape_string para evitar
las inyeccios sql y htmlentities para xss, ( gracias @pichoncitotv por avisar)
despues creamos un array llamado $response que nos va a sevir mas adelante para llevar un
registro de los errores




if($username == "" or $email == "" or $pass1 == "" or $pass2 == "" or $web==""
){
$response[] = "Debes completar todos los campos";

}



seguimos verficando si el usuario dejo algun espacio en blanco, para esto hacemos un if que
verfica cada variable, a travez de un condicional or, esto significa que una vez que se
encuentra un campo vacio el if retorna false y al array se le asigna un texto que despues se va
a mostrar



if(strlen($username) > 15){
$response[] ="El nombre debe tener menos de 15 caracteres";

}



para el nombre de usuario queremos una cadena que tenga menos de 15 caracteres de largo,
esto se logra con la funcin strlen que devuelve la longitud de la cadena



if($pass1 != $pass2){
$response[] = "Los password deben coincidir";

}



mediante el operador condicional != podemos saber si los campos de ingresa y repita password
son iguales, si la condicin devuelve true agregamos otro valor al array



if(!filter_var($email,FILTER_VALIDATE_EMAIL )){
$response[] = "El email no es valido";

}

if(!filter_var($web,FILTER_VALIDATE_URL )){
$response[] = "La url no es valida";

}



para la validacin del email y el sitio web usamos filter_var, pasandole como primer argumento
la variable que queremos verificar, otra manera de hacer esto es mediante el uso de
expresiones regulares, pero en este articulo nos vamos a quedar con este mtodo simple



if(empty($response)){
echo "Los datos son validos";
}else{
foreach($response as $r){

echo "Errores: ".$r."<br>";
}
}



Por ultimo, mostramos al usuario si hubo algn error, esto se logra con la funcin empty que
nos dice si el array esta vaci o no, si es el primer caso hacemos un echo y le decimos al
usuario que no hay errores, de otra manera mediante un foreach recorremos el array y
mostramos los errores que se ocurrieron

codigo completo index.php



<?php
if(isset($_POST["submit"])){
$username = trim(htmlentities(mysql_real_escape_string($_POST["username"])));
$email = trim(htmlentities(mysql_real_escape_string($_POST["email"])));
$pass1 = trim(htmlentities(mysql_real_escape_string($_POST["pass1"])));
$pass2 = trim(htmlentities(mysql_real_escape_string($_POST["pass2"])));
$web = trim(htmlentities(mysql_real_escape_string($_POST["web"])));

$response = array();

if($username == "" or $email == "" or $pass1 == "" or $pass2 == "" or $web==""){
$response[] = "Debes completar todos los campos";

}

if(strlen($username) > 15){
$response[] ="El nombre debe tener menos de 15 caracteres";

}

if(!filter_var($email,FILTER_VALIDATE_EMAIL )){
$response[] = "El email no es valido";

}

if($pass1 != $pass2){
$response[] = "Los password deben coincidir";

}

if(!filter_var($web,FILTER_VALIDATE_URL )){
$response[] = "La url no es valida";

}

if(empty($response)){
echo "Los datos son validos";
}else{
foreach($response as $r){

echo "Errores: ".$r."<br>";
}
}



}
?>
<h2>Registrate</h2>
<form action="" method="POST">
<p><label for="username">Username: </label><br>
<input type="text" name="username"></p>

<p><label for="email">Email: </label><br>
<input type="text" name="email"></p>

<p><label for="pass1">Password: </label><br>
<input type="password" name="pass1"></p>

<p><label for="pass2">Repite el password: </label><br>
<input type="password" name="pass2"></p>

<p><label for="web">Ingresa tu sitio web: </label><br>
<input type="text" name="web"></p>
<p><input type="submit" value="Registrarse" name="submit"></p>