PHP - boolean con filter_input y filter_input_array

   
Vista:
Imágen de perfil de victor

boolean con filter_input y filter_input_array

Publicado por victor (7 intervenciones) el 08/06/2016 11:18:50
¿Por qué cuando hago un array para recoger varios registros de un checkbox utilizando filter_input o filter_input_array me sale como boolean?

function displayUserUrl($urlArray){
global $bm_table;
$bm_table = TRUE;
?>
<table style="width: 300px;" id="delete">
<form name="bm_table" action="deleteBms.php" method="post">
<tr>
<th>Marcador</th>
<th>Borrar?</th>
</tr>
<?php
if(is_array($urlArray) && count($urlArray)>0){
foreach ($urlArray as $url){
?>
<tr>
<td><a href="<?=$url?>"><?=htmlspecialchars($url)?></a></td>
<td><input type="checkbox" name="del_me[]" value="<?=$url?>"/></td>
</tr>
<?php
}
}else{
echo "<tr><td>No hay marcadores en el registro.</td></tr>";
}
?>
</form>
</table>
<?php
}

abajo la página deleteBms.php

$delMe = array('del_me' => FILTER_SANITIZE_URL);
$del_me = filter_input_array(INPUT_POST, $delMe);

para comprobar utilizó var_dump

var_dump($del_me);

y me sale como booleano.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de kip

boolean con filter_input y filter_input_array

Publicado por kip (571 intervenciones) el 08/06/2016 21:56:37
Hola, te da bool false porque esta esperando el parametro definition, que segun el manual:

Parámetros

type
Una de las siguientes: INPUT_GET, INPUT_POST, INPUT_COOKIE, INPUT_SERVER o INPUT_ENV.

definition
Un array definiendo los argumentos. Una clave válida será aquella que contiene un string con el nombre de una variable y un valor válido aquel que o bien es un tipo filter type o un array especificando opcionalmente el filtro, flags y opciones. Si el valor es un array, las claves válidas serán: filter que especifica el tipo filter type, flags que define cualquier flag que deba aplicarse a los filtros, y options que establece cualquier opción que se deba aplicar al filtro. Para entender mejor su funcionamiento, vea el ejemplo inferior.

Este parámetro puede ser también un entero que indique una constante de filtro. Entonces todos los valores en el array de entrada son filtrados por ese filtro.


Entonces una vez leido aquello:

1
2
3
4
5
<?php
$array_delme = array('del_me'=> array ( 'name' => 'del_me', 'filter' => FILTER_SANITIZE_ENCODED,    'flags'  => FILTER_REQUIRE_ARRAY)); // declaro la variable que servira como definicion para la funcion filter_input_array
$del_me = filter_input_array(INPUT_POST,$array_delme );
var_dump($del_me);
?>

Si te fijas coloco los parametros filter y flags para que en cada valor del array haga el filtro correspondiente.

Tal como lo dice el manual:
http://php.net/manual/es/function.filter-input-array.php

Claro que eso que mencione arriba es para la funcion filter_input_array, la funcion filter_input no recorre arrays y si lo deseas podrias hacer un for para que cada iteracion haga el filtro de cada indice que le indiques, como este ejemplo que postee en otro tema tuyo:

1
2
3
4
5
6
7
8
9
<?php
$array = $_POST['del_me'];
$i=0;
foreach($array as $k => $v){
    $array[$i] =  filter_var($v, FILTER_SANITIZE_ENCODED);
    $i++;
}
var_dump($array); //hacemmos una prueba a ver si nos muestra cada valor filtrado
?>

Espero te sirva.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de victor

boolean con filter_input y filter_input_array

Publicado por victor (7 intervenciones) el 09/06/2016 13:20:14
Muchas gracias otra vez por la respuesta Kip, pero hago el loop for con filter_input y me sale booleano.

1
2
3
4
for($i = 0; $i < count($_POST['del_me']); $i++){
    $del_me[$i] = filter_input(INPUT_POST, 'del_me');
}
var_dump($del_me);

perdona a lo mejor no se lo que hago, llevo poco tiempo programando.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de victor

boolean con filter_input y filter_input_array

Publicado por victor (7 intervenciones) el 09/06/2016 17:39:45
Gracias kip, por la ayuda. Ya encontré la solución.

$del_me = filter_input(INPUT_POST, 'del_me', FILTER_SANITIZE_URL , FILTER_REQUIRE_ARRAY);

recoge todos los valores del array del checkbox.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de kip

boolean con filter_input y filter_input_array

Publicado por kip (571 intervenciones) el 09/06/2016 17:41:31
Hola, para que lo hagas especificando el tipo en el filter deberias usar filter_input_array, lo deje arriba:

1
2
3
4
5
<?php
$array_delme = array('del_me'=> array ( 'name' => 'del_me', 'filter' => FILTER_SANITIZE_URL,    'flags'  => FILTER_REQUIRE_ARRAY)); // declaro la variable que servira como definicion para la funcion filter_input_array
$del_me = filter_input_array(INPUT_POST,$array_delme );
var_dump($del_me);
?>

Pruebalo, lo que hace alli el filter_input_array es buscar una variable $_POST con el name que le das, aqui en esta linea:
1
$array_delme = array('del_me'=> array ( 'name' => 'del_me', 'filter' => FILTER_SANITIZE_URL,    'flags'  => FILTER_REQUIRE_ARRAY));

Si te fijas en la variable $array_delme estoy especificando 'del_me' que seria el nombre de la variable post, tambien especificas el filter que podria ser cualquier tipo de filtro, en este caso FILTER_SANITIZE_URL, te recuerdo ue debes dejar 'flags' para que fincione en el array, y esta variable sera recibida por el input_filter_array:
1
$del_me = filter_input_array(INPUT_POST,$array_delme ); // aqui recibe la variable $array_delme que serian los parametros a ejecutar en esta funcion

Y esta funcion se encargara de buscar una variable tipo $_POST con el nombre que le diste que en este caso es 'del_me', hara los filtros corrrespondientes que le hayas indicado, me entiendes?

Bueno parece que ya encontraste la solucion a tu problema, me alegra, espero esto sirva para alguien que tnga dudas y llegue a este tema.

Si puedes Victor, prueba con esto, de todas formas me alegra que hayas solucionado el problema.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar