filter_input
を使用しているときに、POST
配列変数をプルできません。 POST
入力:
type => 'container',
action => 'edit',
data[display] => 1,
data[query_limit] => 100
$_POST
スーパーグローバルから配列としてdata
変数に正しくアクセスできますが、 filter_input
関数は何も返しません:
$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)
POST
配列変数にfilter_input
を使用することはできませんか?
試してください:
$data = filter_input(INPUT_POST, 'data', FILTER_DEFAULT, FILTER_REQUIRE_ARRAY);
リンク:
FILTER_REQUIRE_ARRAY
は、POST
変数にスカラー値が含まれている場合、falseを返します。不明な場合、またはスカラー値と配列値の両方を受け入れるPOST
変数を意図している場合は、FILTER_FORCE_ARRAY
代わりに、入力を配列として扱い、基本的にスカラー値をキャストします。
$data = filter_input(INPUT_POST, 'data', FILTER_DEFAULT, FILTER_FORCE_ARRAY);
JavaScriptでFormDataを使用し、jquery ajaxでフィールドをポストしました。これらすべてのフィールドを受け取る方法は次のとおりです。
$arrFields = array('field1','field2','field2','field3', 'field4','field5');
foreach($arrFields as $field){
$params[$field] = filter_input(INPUT_POST, $field, FILTER_DEFAULT);
}
var_dump($params);
次に、すべてのデータを配列に入れて渡します...
または、ワンショットでフィルタリングを行うことができます...例えば
$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
)
]);
結果は、グローバル$ _POSTが変数である代わりに、この場合は$ MY_INPUTになることを除いて、返されるものに関して投稿データとほとんど同じです。