Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么我不能使用filter\u输入从$\u get工作正常的表单获取信息_Php_Html_Arrays_Filter_Get - Fatal编程技术网

Php 为什么我不能使用filter\u输入从$\u get工作正常的表单获取信息

Php 为什么我不能使用filter\u输入从$\u get工作正常的表单获取信息,php,html,arrays,filter,get,Php,Html,Arrays,Filter,Get,为了将复选框状态信息存储到一个数组中,我在表单中使用get方法 我尝试使用filter\u输入行按顺序从每个复选框中获取信息并将其存储到数组中,当替换为$\u get时,一切正常,但为了安全起见,我被告知不要使用$\u get <form action="" method="get"> <input type="checkbox" name="1">Show Name<br> <input type="checkbox" name="2">Show

为了将复选框状态信息存储到一个数组中,我在表单中使用get方法

我尝试使用filter\u输入行按顺序从每个复选框中获取信息并将其存储到数组中,当替换为$\u get时,一切正常,但为了安全起见,我被告知不要使用$\u get

<form action="" method="get">
<input type="checkbox" name="1">Show Name<br>
<input type="checkbox" name="2">Show Category<br>
<input type="checkbox" name="3">Show Type<br>
<input type="submit" value="Submit">
</form>

<?php
$formArray = array();
$x = 1;
while ($x < 4) {
    if (isset($_GET[$x]))  {    
        $formArray[$x] = filter_input(INPUT_GET, "$x", FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH)  
    }
    else {
        $formArray[$x] = "off";
    }
    $x = $x + 1;
}
?>

显示名称
显示类别
显示类型

然后,数组应该存储“开”或“关”的值,但它只是留空,正如我在替换为“
$formArray[$x]=$\u GET[“$x”];
”时所提到的,程序100%正确运行

您误用了过滤器输入

滤波器输入的核心实现如下:

$b = isset($_GET['b']) && is_string($_GET['b']) ? $_GET['b'] : '';
元素的名称是一个整数。所以,如果name不是字符串,filter_输入将返回false;如果name未设置,则返回null

我已经修改了你的代码片段使其生效

<form action="" method="get">
<input type="checkbox" name="t1">Show Name<br>
<input type="checkbox" name="t2">Show Category<br>
<input type="checkbox" name="t3">Show Type<br>
<input type="submit" value="Submit">
</form>
<?php
    if (isset($_GET)) {
        $formArray = [];
        $x         = 1;
        while ($x < 4) {
            if (isset($_GET['t' . $x])) {
                $formArray[$x] = filter_input(INPUT_GET, 't' . $x, FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH);
            } else {
                $formArray[$x] = "off";
            }
            $x = $x + 1;
        }
        echo "<pre>";
        print_r($formArray);
        die;
}
?>
您正在使用的过滤器标志用于所携带的数据元素


根据。

isset()的参数必须是一个变量。只需使用
if(filter\u input(…)
感谢您创建了一个新的变量。这看起来像
filter\u input
中的一个bug。对我来说,如果变量名是一个数字,为什么它会返回NULL???Rasmus可能会回答这个问题:D.谁是Rasmus?
Array
(
    [1] => off
    [2] => on
    [3] => off
)