18
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

$_POST['foo']とfilter_input(INPUT_POST, 'foo')の違い

Last updated at Posted at 2019-04-08

今更ながら知ったので書く。

sample.php
$foo1 = $_POST['foo'] ?? null;
$foo2 = filter_input(INPUT_POST, 'foo');

の違いがわかってませんでした。

<from action="sample.php" method="post">
  <input type="hidden" name="foo" value="foo">
  <input type="submit">
</form>

上記をsubmitすると

sample.php
<?php
$foo1 = $_POST['foo'] ?? null;
$foo2 = filter_input(INPUT_POST, 'foo');

var_dump($foo1);
// string(3) "foo"
var_dump($foo2);
// string(3) "foo"

どちらも結果は同じ

sample.php
<?php
$_POST['foo'] = 'bar';    // $_POSTの値を書き換える
$foo1 = $_POST['foo'] ?? null;
$foo2 = filter_input(INPUT_POST, 'foo');

var_dump($foo1);
// string(3) "bar"
var_dump($foo2);
// string(3) "foo"

$_POSTの値を直接書き換えると結果が変わった。
filter_input()はHTTPボディから参照しているっぽい。
$_POST書き換えるなよって話しですが、(書き換えたことあります。ごめんなさい。)

#気になったこと
https://www.php.net/manual/ja/function.filter-input.php

返り値
成功した場合は要求された変数の値、フィルタリングに失敗した場合に FALSE、 あるいは変数 variable_name が設定されていない場合に NULL を返します。フラグ FILTER_NULL_ON_FAILURE が指定されている場合は、変数が設定されていなければ FALSE、 フィルタリングに失敗したら NULL を返します。

返り値のfalseってなに。
変数が設定されてない場合はnullじゃないの。

<input type="hidden" name="foo[]" value="hoge">
<input type="hidden" name="foo[]" value="fuga">
sample.php
<?php
$foo1 = $_POST['foo'] ?? null;
$foo2 = filter_input(INPUT_POST, 'foo');

var_dump($foo1);
// array(2) { [0]=> string(4) "hoge" [1]=> string(4) "fuga" }
var_dump($foo2);
// bool(false)

配列を渡すとfalseが帰ってくる。

#配列の受け取り

sample.php
<?php
$foo2 = filter_input(INPUT_POST, 'foo', FILTER_DEFAULT, FILTER_REQUIRE_ARRAY);
var_dump($foo2);    // array(2) { [0]=> string(4) "hoge" [1]=> string(4) "fuga" }

第4引数にFILTER_REQUIRE_ARRAYを指定すると配列を受け取れる。

#オプションとかで色々指定できるっぽい

<input type="hidden" name="foo" value="30">
sample.php
<?php
$foo1 = $_POST['foo'] ?? null;
$foo2 = filter_input(INPUT_POST, 'foo', FILTER_VALIDATE_INT, [
            "options" => [
                "max_range" => 20,
                "min_range" => 10
            ]
        ]);

var_dump($foo1);   // string(2) "30"
var_dump($foo2);   // bool(false)

この場合もfalseが帰ってくる。

18
19
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?