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 IPLa 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 usuario
El 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.