Filter_input为false,$ _ POST有数据

时间:2018-07-12 09:03:30

标签: php

所以我有一个我无法动摇的问题,我确信自己在做一些简单的错误,但是我仍然找不到错误,我有一个带有2个option元素的html select元素,select设置为多并且两个选项都已设置为选中状态,所有要做的就是单击“应用”按钮,看看结果如何。

所以我的问题是,当您运行此方案并对过滤器输入进行变量转储时,它返回false(无数据),但是当您全局转储$ _POST变量时,它具有我正在寻找的数据,任何知道我在做什么错。

代码如下:

$submit = filter_input(INPUT_POST, 'submit', FILTER_SANITIZE_SPECIAL_CHARS);

if(!isset($submit)){
    ?>
<form action="" method="post">
    <select name="partsused[]" id="usedparts" multiple>
        <option value="empty" selected>Empty</option>
        <option value="full" selected>Full</option>
    </select>

    <br/>
    <button type="submit" name="submit" value="submit">Apply</button>
</form>
  <?php  
} else {    
    $someArray = filter_input(INPUT_POST, 'partsused');

    var_dump($someArray);
    var_dump($_POST['partsused']);
    die;
}  

我从var_dump获得的输出如下:

bool(false) 
array(2) { [0]=> string(5) "empty" [1]=> string(4) "full" }   

因此,您可以看到filter_input根本没有从$ _POST读取值,所以我尝试了所有不同的过滤器,甚至根本没有过滤。

所以只是为了清楚起见,是的,将S_POST ['partsused']分配给变量$ someArray确实可以,但是我不喜欢这样做,我总是使用filter_input,不确定为什么这样做了,任何想法或需要。

2 个答案:

答案 0 :(得分:0)

根据this注释,如果输入是数组,并且您正在使用filter_input,则需要使用以下设置:

var_dump(filter_input(INPUT_POST, 'partsused', FILTER_DEFAULT , FILTER_REQUIRE_ARRAY));

并根据文档:

  

FILTER_REQUIRE_ARRAY-要求该值是一个数组。

答案 1 :(得分:0)

您必须改为使用filter_input_array

$someArray = filter_input_array(INPUT_POST, 'partsused');