El filtro de validación se utiliza para comprobar si los datos cumplen con ciertos requisitos. Por ejemplo, si asignamos el filtro FILTER_VALIDATE_EMAIL se determinará si el dato a validar es dirección de correo electrónico válida, pero no va a cambiar los datos en sí. El filtro ya sabe como validar el dato.
La función a utilizar sera filter_var(dato_a_validar, filtro)
Ejemplo validando un Email:
<?php
//email de ejemplo
$email = "demo@servidor.com";
if (!filter_var($email, FILTER_VALIDATE_EMAIL) === false) {
echo("$email es válido");
} else {
echo("$email no es valido");
}
?>
Validad un numero
<?php
$enlace=”http://demophp.com”;
if (!filter_var($enlace, FILTER_VALIDATE_URL) === false) {
echo("Es una url valida");
} else {
echo("La url no es valida");
}
?>
Existen muchos filtro como ser
FILTER_VALIDATE_BOOLEAN 258 Validacion Booleana o Verdadero/Falso
FILTER_VALIDATE_FLOAT 259 Validacion numeros con decinales
FILTER_VALIDATE_INT 257 Validacion numeros enteros
FILTER_VALIDATE_IP 275 Validacion de IP
La Sanitización es el proceso por el cual se desinfecta o limpia los datos provenientes de fuentes inseguras, por lo que es posible revisar y eliminar caracteres no deseados. Por ejemplo, pasando FILTER_SANITIZE_EMAIL eliminará caracteres que no son apropiados para una dirección de correo electrónico que contenga, pero es importante saber que la sanitización no valida los datos.Ejemplo:
<?php
//Ingresamos un email con caraceres no permititdos
$emailingresado = "demo?.php]!@servi?dor.com";
//Limpiamos el email
$emailseguro = filter_var($email, FILTER_SANITIZE_EMAIL);
//validamos el email
if (!filter_var($emailseguro, FILTER_VALIDATE_EMAIL) === false) {
echo("$emailseguro es válido");
} else {
echo("$emailsegurio no es valido");
}
echo $emailingresado.” “.$emailseguro;
?>
Filtro para invocar funciones definidas por el usuarioEl filtro FILTER_CALLBACK llama a una función definida por el usuario para aplicar a un tipo de dato o bien a una estructura a la que se le aplica el filtro.
<?php
function aplicardescuento($string)
{
return str_replace("10%", "25%", $string);
}
$datos[0] = "Silla 10% de descuento!";
$datos[1] = "Mesa 10% de descuento!";
$datos[2] = "Vajilla 10% de descuento";
$datos[3] = "Manteleria 10% de descuento";
echo "Antes<br>";
for($i = 0; $i < count($datos); $i++) {
echo $datos[$i].'<br>';
}
echo '<br>';
echo "Despues<br>";
for($i = 0; $i < count($datos); $i++) {
echo filter_var($datos[$i], FILTER_CALLBACK,
array("options"=>"aplicardescuento")).'<br>';
}
?>
Como enviar parámetros a un filtro CALLBACK para procesar un dato desde la función o realizar una tarea determinada.
Veamos un ejemplo donde envío como parámetro un producto ya sea el nombre o el código y la cantidad y el precio unitario, luego invocare un filtro para calcular el importe final, esto puede servir para validar si el código del producto es correcto o bien filtrar el producto primero y luego buscar el precio y calcular o aplicar algún descuento o recargo.
<? echo "Filtro con parámetros <br><br>";
function calcular($dato, $valorA, $valorB)
{
$calculo=$valorA+$valorB;
return $dato.' ............ €'.$calculo;
}
//Dato ingresado por el usuario
$dato = 'ProductoA';
$importe = filter_var($dato, FILTER_CALLBACK, array('options' => function($var) {
return calcular($var, 20, 10);
}));
echo "Detalle de compra:<br>".$importe; ?>
¿Cuando debería utilizar los filtros de validación o sanitización en una aplicación?
La mayoría de las web e intranets reciben datos de distintas fuentes algunas de bases de datos o de fuentes externas o bien por ingreso de datos de usuarios a través de un formulario, por ello utilizar los filtros garantiza que los datos sean fiables.