Foros del Web » Programando para Internet » PHP »

filter_input callback con multiples argumentos, ¿se puede?

Estas en el tema de filter_input callback con multiples argumentos, ¿se puede? en el foro de PHP en Foros del Web. Hola, quisiera saber si se puede mandar a llamar una función callback utilizando filter_input o filter_input_array pero pasando mas de un argumento, digamos: Código PHP: ...
  #1 (permalink)  
Antiguo 27/01/2010, 17:45
 
Fecha de Ingreso: septiembre-2009
Mensajes: 15
Antigüedad: 14 años, 7 meses
Puntos: 0
Pregunta filter_input callback con multiples argumentos, ¿se puede?

Hola, quisiera saber si se puede mandar a llamar una función callback utilizando filter_input o filter_input_array pero pasando mas de un argumento, digamos:

Código PHP:
<?php
    
function compare($action$actions){
        foreach(
$actions as $possible)
            if(
$action == $posible)
                return 
$posible;
        return 
'idle';
    }
    
    
$filters = array("action" => array("filter" => FILTER_CALLBACK"flags" => FILTER_REQUIRE_ARRAY, array("options" => array("compare", array("opcion_1""opcion_2""opcion_3""opcion_4")))));
    
    
$result filter_input(INPUT_GET"action",  $filters);
?>
si fuera posible realmente no se como se escribiria la parte de "options" de la variable "$filters".

Gracias.
  #2 (permalink)  
Antiguo 27/01/2010, 17:52
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 20 años, 4 meses
Puntos: 89
Respuesta: filter_input callback con multiples argumentos, ¿se puede?

Tendrías que hacer algo así...

Código PHP:
Ver original
  1. // ... etc
  2.     function compare($action, $actions){
  3.         foreach($actions as $possible)
  4.             if($action == $posible)
  5.                 return $posible;
  6.         return 'idle';
  7.     }
  8. array("options" => call_user_func_array('compare', array('opcionAComparar', array('op1','op2','op3','op4'))));
  9. // ... etc

Así llamarías a la función compare, pasándole como argumento una cadena a comprar, y un arreglo con 4 opciones.

Cualquier cosa nos avisas. Nos vemos.
__________________
Nunca te olvidaré mi negra hermosa. Te extraño demasiado.
  #3 (permalink)  
Antiguo 27/01/2010, 20:47
 
Fecha de Ingreso: septiembre-2009
Mensajes: 15
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: filter_input callback con multiples argumentos, ¿se puede?

Genial genial, gracias voy a probarlo.
  #4 (permalink)  
Antiguo 28/01/2010, 00:16
 
Fecha de Ingreso: septiembre-2009
Mensajes: 15
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: filter_input callback con multiples argumentos, ¿se puede?

hola, otro problema, bueno uno a partir de la solución anterior, como se supone que cacharía el valor que esta analizando filter_input o en algun caso filter_input_array donde supuestamente va 'opcionAComparar' sin tener que poner $_GET['action'] en ese lugar sino que sea pasado directamente, por supuesto junto con el array de opciones.

Gracias de nuevo.
  #5 (permalink)  
Antiguo 28/01/2010, 06:41
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 20 años, 4 meses
Puntos: 89
Respuesta: filter_input callback con multiples argumentos, ¿se puede?

Cita:
Iniciado por quarkmarino Ver Mensaje
hola, otro problema, bueno uno a partir de la solución anterior, como se supone que cacharía el valor que esta analizando filter_input o en algun caso filter_input_array donde supuestamente va 'opcionAComparar' sin tener que poner $_GET['action'] en ese lugar sino que sea pasado directamente, por supuesto junto con el array de opciones.

Gracias de nuevo.
Mis disculpas, pero honestamente no entendí lo que quisiste decir D:
__________________
Nunca te olvidaré mi negra hermosa. Te extraño demasiado.
  #6 (permalink)  
Antiguo 28/01/2010, 15:37
 
Fecha de Ingreso: septiembre-2009
Mensajes: 15
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: filter_input callback con multiples argumentos, ¿se puede?

Lo que me indicabas es, como pasar varios parámetros en la función de callback, lo cual esta bien, es lo que pregunte al principio, pero ahora no se como utilizar el valor que este procesando la función filter_input_array en cada momento, digamos:

La idea realmente es utilizar un filter_input_array donde esta toma cada elemento del array de entrada $_GET y automáticamente lo filtra de acuerdo a lo que se indique en la variable $filters, la cual podría extenderse para que revisara cada entrada GET de acuerdo a su clave,

de:
Código PHP:
$filters = array("action" => array("filter" => FILTER_CALLBACK, array("options" => call_user_func_array('compare', array('opcionAComparar', array('op1','op2','op3','op4'))))); 
a
Código PHP:
$filters = array(
    
"action" => array("filter" => FILTER_CALLBACK, array("options" => call_user_func_array('compare', array('opcionAComparar', array('op1','op2','op3','op4')))));
    
"username" => array("filter" => FILTER_CALLBACK, array("options" => 'verifyUsername')),
    
"email" => FILTER_VALIDATE_EMAIL,
    
"password" => array("filter" => FILTER_CALLBACK, array("options" => 'verifyPassword')),
    
"contry" => array("filter" => FILTER_CALLBACK, array("options" => 'verifyCountry')),
        ); 
esto es:
"filtrar la variable $_GET['action'] de acuerdo a la función 'compare' ",
"filtrar la variable $_GET['username'] de acuerdo a la función 'verifyUsername'"
"filtrar la variable $_GET['email'] de acuerdo al filtro pre construido FILTER_VALIDATE_EMAIL",...etc


Código PHP:
// ... etc
    
function compare($action$actions){
        foreach(
$actions as $posible)
            if(
$action == $posible)
                return 
$posible;
        return 
'idle';
    }

    function 
verifyUsername($user){
    
//...
    
}


    
$result filter_input_array(INPUT_GET,  $filters);
// ... etc 
Sin embargo por ejemplo cuando se filtre la variable $_GET['username'] su valor es pasado automáticamente a la función verifyUsername, lo cual no sucede con la variable $_GET['action'] por lo que probablemente tendría que escribirlo de la siguiente manera:

Código PHP:
"action" => array("filter" => FILTER_CALLBACK, array("options" => call_user_func_array('compare', array($_GET['action'], array('op1','op2','op3','op4'))))); 
substituyendo la cadena 'opcionAcomparar' por la variable $_GET['action'], es decir lo tendría que especificar manualmente, para aquellas funciones de múltiples parámetros a diferencia de aquellas como la que filtra a $_GET['username'] donde solo indico el nombre de la función que quiero utilizar y el parametro se pasa automáticamente.

La duda:

¿Como hago para pasar automáticamente el valor que se esta filtrando a una función de callback junto con otros parámetros, tal como un array?

espero haber sido mas claro ahora, lo que pasa es que soy algo novato en esto de los post Gracias.
  #7 (permalink)  
Antiguo 28/01/2010, 17:40
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 20 años, 4 meses
Puntos: 89
Respuesta: filter_input callback con multiples argumentos, ¿se puede?

Creo que ya te entendí, y la verdad no lo creo posible. ¿Quieres que el valor "action" se pase automáticamente al primer argumento del callback a la función compare? La verdad no creo que se pueda, ya que no veo la forma de que el script adivine que valor debe ser el que tiene que filtrar.

Si te das cuenta, hasta cuando le das valores al arreglo $filters estás especificando los valores del array $_GET, y la función filter_input_array las detecta automáticamente debido a que así funciona.

Lo que podrías hacer, es crear una función que "reemplace" a la función filter_input_array, ya que de esta manera podrías hacerla más flexible, pero sería redundante, ya que estarías haciendo lo mismo que arriba, pero con otro nombre.

Espero haberte sido de ayuda. Si tienes otra pregunta, no dudes en hacerla.

Nos vemos.
__________________
Nunca te olvidaré mi negra hermosa. Te extraño demasiado.
  #8 (permalink)  
Antiguo 28/01/2010, 21:30
 
Fecha de Ingreso: septiembre-2009
Mensajes: 15
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: filter_input callback con multiples argumentos, ¿se puede?

O, bien, muchas gracias, creo que incluso me ha quedado mas claro, tal ves era por que tenia otro enfoque del funcionamiento de filter_input_array, bueno gracias. nos vemos.

Etiquetas: argumentos, multiples
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 18:15.