Foros del Web » Programando para Internet » PHP »

Control de variables (Get y post)

Estas en el tema de Control de variables (Get y post) en el foro de PHP en Foros del Web. Hola: Estaba buscando informacion sobre como (una vez recogidas las variables via Post o Get) podria controlar que dichas variables no contienen codigo peligroso.. Digamos ...
  #1 (permalink)  
Antiguo 27/04/2005, 08:00
 
Fecha de Ingreso: abril-2005
Mensajes: 1
Antigüedad: 12 años, 7 meses
Puntos: 0
Control de variables (Get y post)

Hola:

Estaba buscando informacion sobre como (una vez recogidas las variables via Post o Get) podria controlar que dichas variables no contienen codigo peligroso..

Digamos k uso:
Cita:
if (isset($HTTP_POST_VARS["guid"]) || isset($HTTP_GET_VARS["guid"])) {
if (isset($HTTP_POST_VARS["guid"])) $guid = $HTTP_POST_VARS["guid"];
elseif (isset($HTTP_GET_VARS["guid"])) $guid = $HTTP_GET_VARS["guid"];
}
Pero kerria controlar que guid es un numero entero. Algo como..
Cita:
$guid = compreba_variables($nombre_variable_guid,"entero", 1,400);

function comprueba_variables ( variable, tipo, min, max) {
// variable: Nombre de la variable a recoger por Post o Get
// tipo: Tipo de la variable: entero, decimal, texto, email
// min: Numero minimo en caso de ser un numero. Min caracteres en caso de texto o email
// max: Numero maximo en caso de ser un numero. Max caracteres en caso de texto o email
...
// RECOGER X POST O GET la variable si es k existe
...
if ($tipo=="entero") {
.............
}
else if ($tipo=="decimal") {
...........
}
else if ($tipo=="texto") {
// Ojo con posible SQL...
...........
}
else if ($tipo=="email"){
...........
}
return ($guid);
}
Se que tiene k existir algo de esto ya hecho pero no lo encuentro... me podeis ayudar a localizarlo o a rellenar esos puntos suspensivos?
Un saludo:
Iñigo Aldama
  #2 (permalink)  
Antiguo 27/04/2005, 09:54
Avatar de sism82  
Fecha de Ingreso: octubre-2003
Ubicación: Guadalajara
Mensajes: 865
Antigüedad: 14 años, 1 mes
Puntos: 1
En donde tienes puntos suspensivos usa funciones de php como is_numeric, is_string is_array, y en el peor de los casos ereg() para comparar el dato contra una expresión regular, por ejemplo para el caso del email. En los casos mas simples, si no quieres validar, pero si asegurarte de que el valor sea del tipo que deseas, puedes usar casting (int)$valor, (float)$valor, (string)$valor. etc.

un saludo
  #3 (permalink)  
Antiguo 27/04/2005, 10:13
Avatar de yoseman  
Fecha de Ingreso: diciembre-2003
Ubicación: Alicante (Spain)
Mensajes: 471
Antigüedad: 14 años
Puntos: 5
Yo tengo una pequeña función que comprueba si una variable es del tipo que se permita y tambien comprueba minimo-maximo de la siguiente forma:

entero o decimal:compara si esta en el intervalo [$min;$max]
string: comprueba si la longitud de la cadena esta entre $min y $max
array: comprueba si el número de elementos del array está entre $min y $max

Pero claro no es exactamente lo mismo además de que falta lo del mail (creo que eso esta en las faqs)

De todas formas te lo pongo por si te sirve de algo:

Código PHP:
<?
// los tipos que puede devolver gettype son todos estos
// $tipos_permitidos=array("integer","double","string","array","object","unknown type");

FUNCTION verifica_variable($mivariable,$tipos_permitidos,$min,$max)
{
$comprueba_tipo_permitido=IN_ARRAY(GETTYPE($mivariable),$tipos_permitidos);
$que_hacer_si_tipo_desconocido=FALSE//FALSE ->ERROR    TRUE ->SEGUIR ADELANTE
    
SWITCH (GETTYPE($mivariable))
        {
        CASE 
"integer" 
        CASE 
"double" :         
            
$comprueba_tipo_permitido*=(($min<=$mivariable) && ($max>=$mivariable));
            break;
        CASE 
"string" 
            
$comprueba_tipo_permitido*=(($min<=(STRLEN($mivariable))) && ($max>=(STRLEN($mivariable))));
            break;
        CASE 
"array" :
            
$comprueba_tipo_permitido*=(($min<=COUNT($mivariable)) && ($max>=COUNT($mivariable)));
            break;
        CASE(
"unknown type") :
            
$comprueba_tipo_permitido*=$que_hacer_si_tipo_desconocido;
            break;
        DEFAULT:
            
$comprueba_tipo_permitido=FALSE;
        }

RETURN (
$comprueba_tipo_permitido);
}
$tipos_permitidos=array("integer","double","string","array","object","unknown type");
(no sé que diantres pasa que me pone espacios de mas en algunas partes :S)



Es distinto, porque tu pasas una varialbe del tipo que sea y un array con los tipos permitidos, y la función comprueba si está dentro de los requerimientos de min y max además de los tipos permitidos.

Salu2 ;)
__________________
[+]
[+]
  #4 (permalink)  
Antiguo 27/04/2005, 13:32
Avatar de sism82  
Fecha de Ingreso: octubre-2003
Ubicación: Guadalajara
Mensajes: 865
Antigüedad: 14 años, 1 mes
Puntos: 1
yoseman: no se de donde tomaste la idea, pero a pesar de que php no sea case-sensitive, es mala idea usar mayúsculas con los nombres de las funciones.

IN_ARRAY, COUNT etc........ in_array(), count()

saludos
  #5 (permalink)  
Antiguo 27/04/2005, 13:39
Avatar de yoseman  
Fecha de Ingreso: diciembre-2003
Ubicación: Alicante (Spain)
Mensajes: 471
Antigüedad: 14 años
Puntos: 5
Tienes razón es una manía tonta que cogí... A ver si se me pasa.

Salu2 ;)
__________________
[+]
[+]
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:05.