Buenas,
Recien acabo de escribir una funcion PHP para filtrar una variable segun algunas condiciones... Les dejo el codigo por si a alguien le sirve, y de paso si tienen ganas, espero criticas para mejorarla, o ideas para que sea mas comoda.
<?php
/**
* @autor Alex_Broadcast
* @desc Funcion para filtrar variables.
* @uso: filtra_var(Cadena, Numeros?, Letras?, Minimo, Maximo, Especiales?, Para DB?);
* Por defecto las letras y los numeros si se permiten y no tiene MAX ni MIN.
*/
function filtra_var($var,$num=1,$let=1,$min=0,$max=0,$exp=0,$db=0){
if($num == 0) $var = preg_replace("/[0-9]/",'',$var);
if($let == 0) $var = preg_replace("/[a-zA-Z]/",'',$var);
if($max != 0){ $long = strlen($var);
if($min > $long || $long > $max){ return FALSE;} }
if($exp != 1) $var = preg_replace("/^[a-z0-9]$/i",'',$var);
if($db == 1){ //Si $var va a un query SQL...
$var = htmlentities($var, ENT_QUOTES);
if(get_magic_quotes_gpc()) $var = stripslashes($var);
}
return $var;
}
/* Ejemplo: Solo numeros, y de 2 cifras minimo, 6 maximo */
$edad = filtra_var($edad,1,0,2,6,0,0);
/* Ejemplo: Solo numeros, sin MIN ni MAX */
$edad = filtra_var($edad,1,0);
/* Ejemplo: Numeros y letras, 3 MIN, 9 MAX */
$edad = filtra_var($edad,1,1,3,9);
?>
La filtracion para evitar SQL INJECTION no se si es la mas optima, pero yo en mis paginas usaba ademas de todo eso funciones propias de MYSQL y no queria incluirlas en la funcion por si al ejecutarla aun no tenian una conexion establecida... cuestion de adaptarla a sus necesidades.
Saludos!
no le veo mucha funcionalidad ni practicidad, lo siento pero no es recomendale esa funcion.
1.- nada como un excelente casteo.
intval();
2.- y esta mera para escapar caracteres feos :(
mysql_real_escape_string();
Y liston de perro, no nesesitas tanta cantaleta.
SALUDOS MAI
Gracias por tu sinceridad ;D
Para cuando queremos solo numeros pues intval() si es mucho mejor que todo esto, pero yo la hice para casos en los que haya que combinar mas factores.
Y lo de mysql_real_escape_string() si es verdad, yo la uso en mis scripts, pero como la funcion tenia que ser mas universal pues... si la ponia en esta funcion y alguien la usaba sin tener una conexion a base de datos previa, le saldria error... o simplemente no escaparia la cadena si le ponemos @.
De todas formas tampoco tengo mucho nivel en PHP, esperaba que aqui le sacaran criticas a mi funcion para mejorarlo, gracias!
Un saludo.