Hay dos tipos de filtrado: validación y saneamiento.
La validación se usa para validar o comprobar si los datos cumplen ciertas especificaciones.
El saneamiento limpiará los datos, de modo que los cambiará eliminando los caracteres no deseados.
El saneamiento limpiará los datos, de modo que los cambiará eliminando los caracteres no deseados.
Ya habÃamos repasado las primeras funciones, filter_has_var, filter_id, filter_input, filter_list, filter_var, ahora es el turno de las que trabajan con array's.
- filter_input_array: es similar a filter_input, la diferencia es que permite trabajar con varias variables externas, para asà evitar tener que llamar a su homologa varias veces. Devuelve false en caso de que falle el filtro, null en caso de que la variable no este creada.
sintaxis:
filter_input_array (tipo,definición)
donde:
- tipo puede ser alguna de las siguientes constantes: INPUT_GET, INPUT_POST, INPUT_COOKIE, INPUT_SERVER o INPUT_ENV.
- definición representará un array especificando opcionalmente el filtro, flags y opciones
ejemplo:
Para el caso del campo txtNombre, fÃjate que usamos FILTER_SANITIZE_STRING, que pertenece a una lista de filtros de saneamientos que te permitirán limpiar los datos recibidos. Entre algunos, tenemos:
- filter_var_array es similar a filter var() con la diferencia de que permite trabajar con varias variables al mismo tiempo.
ejemplo:
Referencias:
devzone.zend.com
php.net
(clic para mostrar/ocultar el código)
// verificamos si no se envio el formulario.. if (!filter_has_var(INPUT_POST, 'btEnviar')) { echo ' <html> <head></head> <body> <form action="" method="post" > Nombre: <input type="text" name="txtNombre" size="20" maxlength="20"><br /> Email: <input type="text" name="txtEmail" size="20" maxlength="70"><br /> Web: <input type="text" name="txtWeb" size="20" maxlength="70"><br /> Promedio: <input type="text" name="txtPromedio" size="4" maxlength="2"><br /> Cursos realizados <br/> <input type="checkbox" name="chkCursos[]" value="1" /> Arquitectura del computador.<br /> <input type="checkbox" name="chkCursos[]" value="2" /> Ingenieria del software.<br /> <input type="checkbox" name="chkCursos[]" value="3" /> Sistema de información<br /><br /> <input type="submit" name="btEnviar" value="Enviar"> </form> </body> </html>'; exit; // no mostramos más .. } // armamos un array especificando el filtro, flags y opciones para cada campo $arrCampos = array ( // eliminamos caracteres no deseados 'txtNombre' => array('filter'=>FILTER_SANITIZE_STRING), // lo validamos como Email 'txtEmail' => FILTER_VALIDATE_EMAIL, // lo validamos como URL 'txtWeb' => FILTER_VALIDATE_URL, // rango del promedio [1-100] 'txtPromedio' => array('filter' => FILTER_VALIDATE_INT,'options'=> array('min_range'=>1, 'max_range'=>100)), // lo validamos como entero e indicamos que debe ser un array 'chkCursos' => array('filter' => FILTER_VALIDATE_INT,'flags' => FILTER_REQUIRE_ARRAY), ); // validamos cada elemento del array $miArray = filter_input_array(INPUT_POST, $arrCampos); // verificamos .. if (empty($miArray['txtNombre'])) echo 'El campo <b>Nombre</b> está vacio o es <span style="color:red">incorrecto</span>.'; else echo '<br/>Nombre <span style="color:blue">Válido</span>.'; if (empty($miArray['txtEmail'])) echo '<br/>El campo <b>Email</b> está vacio o es <span style="color:red">incorrecto</span>.'; else echo '<br/>Email <span style="color:blue">Válido</span>.'; if (empty($miArray['txtWeb'])) echo '<br/>El campo <b>Web</b> está vacio o es <span style="color:red">incorrecto</span>.'; else echo '<br/>Web <span style="color:blue">Válida</span>.'; if (empty($miArray['txtPromedio'])) echo '<br/>El campo <b>Promedio</b> está vacio o es <span style="color:red">incorrecto</span>.'; else echo '<br/>Promedio <span style="color:blue">Válido</span>.'; if (empty($miArray['chkCursos'])) echo '<br/>Debes seleccionar por lo menos un <b>Curso</b> de la lista.'; else echo '<br/>Muy bien, hay por lo menos un curso seleccionado.';
Para el caso del campo txtNombre, fÃjate que usamos FILTER_SANITIZE_STRING, que pertenece a una lista de filtros de saneamientos que te permitirán limpiar los datos recibidos. Entre algunos, tenemos:
FILTER_SANITIZE_STRING elimina etiquetas, opcionalmente elimina o codifica caracteres especiales.
FILTER_SANITIZE_EMAIL elimina todos los caracteres excepto letras, números y *+-/=?^_`{|}~@.[]!#$%&’.
FILTER_SANITIZE_NUMBER_INT elimina todos los caracteres excepto, números y los signos + -.
FILTER_SANITIZE_SPECIAL_CHARS escapa caracteres HTML y caracteres con ASCII menor a 32.
FILTER_SANITIZE_URL elimina todos los caracteres excepto números, letras y $-_.+!*’(),{}|\\^~[]`<>#%”;/?:@&=.
FILTER_SANITIZE_ENCODED codifica la cadena como una URL válida.
FILTER_SANITIZE_MAGIC_QUOTES aplica la función addslashes.
FILTER_SANITIZE_NUMBER_FLOAT elimina todos los caracteres excepto, números, los signos +- y opcionalmente ,.eE.
FILTER_SANITIZE_EMAIL elimina todos los caracteres excepto letras, números y *+-/=?^_`{|}~@.[]!#$%&’.
FILTER_SANITIZE_NUMBER_INT elimina todos los caracteres excepto, números y los signos + -.
FILTER_SANITIZE_SPECIAL_CHARS escapa caracteres HTML y caracteres con ASCII menor a 32.
FILTER_SANITIZE_URL elimina todos los caracteres excepto números, letras y $-_.+!*’(),{}|\\^~[]`<>#%”;/?:@&=.
FILTER_SANITIZE_ENCODED codifica la cadena como una URL válida.
FILTER_SANITIZE_MAGIC_QUOTES aplica la función addslashes.
FILTER_SANITIZE_NUMBER_FLOAT elimina todos los caracteres excepto, números, los signos +- y opcionalmente ,.eE.
- filter_var_array es similar a filter var() con la diferencia de que permite trabajar con varias variables al mismo tiempo.
ejemplo:
(clic para mostrar/ocultar el código)
// armamos nuestro array $arrVars = array( 'Email' => 'ID@gmail.com', 'URL' => 'http://cassianet.blogspot.com', 'IP' => '192.168.1.1', 'Edad' => '19', 'Cadena' => 'letras123', 'Hexa' => '0xf0', 'Bool' => 'ON', 'Float' => '111,109.40' ); // armamos el filtro $arrFiltros = array( // valida que la dirección tenga el formato [cadena]@[cadena].[cadena] // devolverÃa true pasándole la cadena de caracteres: a@b.c 'Email' => FILTER_VALIDATE_EMAIL, // como URL valida 'URL' => FILTER_VALIDATE_URL, // dirección IP 'IP' => array('filter' => FILTER_VALIDATE_IP, 'flags' => FILTER_FLAG_IPV6), // rango de Edad permitido 'Edad' => array( 'filter' => FILTER_VALIDATE_INT, 'options' => array('min_range' => 21, 'max_range' => 35)), // cadena de caracteres validada con expresion regular [solo caracteres alfabeticos] 'Cadena' => array( 'filter' => FILTER_VALIDATE_REGEXP, 'options' => array('regexp' => "/^[a-zA-Z]+$/")), // validado como hexadecimal 'Hexa' => array( 'filter' => FILTER_VALIDATE_INT, 'flags' => FILTER_FLAG_ALLOW_HEX, 'options' => array('min_range' => 1, 'max_range' => 0xf0)), // lo validamos como boolean, // devuelve TRUE para si el valor de la variable pasada es (1,TRUE,ON,YES) 'Bool' => FILTER_VALIDATE_BOOLEAN, // lo validamos como FLOAT, // FILTER_FLAG_ALLOW_THOUSAND permite usar una coma (,) como separador de miles en los números 'Float' => array('filter' => FILTER_VALIDATE_FLOAT, 'flags' => FILTER_FLAG_ALLOW_THOUSAND) ); // iniciamos el filtro $arrDatos = filter_var_array($arrVars, $arrFiltros); // mostramos los resultados foreach ($arrDatos as $sVar => $Valor) echo '<br/>Valor ', $sVar , (empty($Valor) ? ' <span style="color:red">Incorrecto</span>.' : ' <span style="color:blue">Correcto</span>.'); /* Devuelve: Valor Email Correcto. Valor URL Correcto. Valor IP Incorrecto. Valor Edad Incorrecto. Valor Cadena Incorrecto. Valor Hexa Correcto. Valor Bool Correcto. Valor Float Correcto. */
Referencias:
devzone.zend.com
php.net
Que buena entrada, me ayudaste muchÃsimo. Sólo te recomiendo que no uses cursiva en el código sino un tipo de fuente mas legible y natural.
ResponderEliminarSaludos!