web-dev-qa-db-fra.com

POST Tableau variable et entrée_filtre

En utilisant filter_input, Je ne parviens pas à extraire une variable de tableau POST. L'entrée POST:

type              => 'container',
action            => 'edit',
data[display]     => 1,
data[query_limit] => 100

Je peux accéder à la variable data à partir de $_POST superglobal correctement en tant que tableau, mais le filter_input la fonction ne renvoie rien:

$data   = $_POST['data']; // Working, woot
$data   = filter_input(INPUT_POST, 'data'); // returns null, should return array
$action = filter_input(INPUT_POST, 'action'); // returns "edit" (correctly)

N'est-il pas possible d'utiliser filter_input pour une variable de tableau POST?

46
jterry

Essayez:

$data   = filter_input(INPUT_POST, 'data', FILTER_DEFAULT, FILTER_REQUIRE_ARRAY);

Liens:

http://php.net/manual/en/function.filter-input.php

http://php.net/manual/en/filter.filters.flags.php

117
jbrtrnd

FILTER_REQUIRE_ARRAY renverra false si la variable POST contient une valeur scalaire. Si vous n'êtes pas sûr ou si vous souhaitez simplement que la variable POST accepte les valeurs scalaires et de tableau, utilisez FILTER_FORCE_ARRAY à la place, qui traitera n'importe quelle entrée comme un tableau, convertissant essentiellement les valeurs scalaires en conséquence.

$data = filter_input(INPUT_POST, 'data', FILTER_DEFAULT, FILTER_FORCE_ARRAY);
11
reformed

J'ai utilisé FormData en javascript et poste les champs avec jquery ajax. La façon dont je reçois tous ces champs est:

$arrFields = array('field1','field2','field2','field3', 'field4','field5');
foreach($arrFields as $field){
   $params[$field] = filter_input(INPUT_POST, $field, FILTER_DEFAULT);
}
var_dump($params);

Ensuite, je vais mettre toutes les données dans un tableau que je peux transmettre ...

Alternativement, vous pouvez effectuer votre filtrage en une seule fois ... par exemple

$MY_INPUT = filter_input_array(INPUT_POST, [
    "item_id" => FILTER_SANITIZE_NUMBER_INT,
    "item_string_code" => FILTER_SANITIZE_STRING,
    "method" => FILTER_SANITIZE_STRING,
    "item_id_array" => array(
        'filter' => FILTER_SANITIZE_NUMBER_INT,
        'flags' => FILTER_REQUIRE_ARRAY
    )
]);

Le résultat est presque le même que les données de publication en termes de ce que vous récupérez, sauf que la variable globale $ _POST étant votre variable, ce sera $ MY_INPUT dans ce cas.

0
Goddard