为啥如果我更改为 INPUT_GET 此代码将始终执行“其他”代码

Posted

技术标签:

【中文标题】为啥如果我更改为 INPUT_GET 此代码将始终执行“其他”代码【英文标题】:Why if i change to INPUT_GET this code will always execute the ''else'' piece of code为什么如果我更改为 INPUT_GET 此代码将始终执行“其他”代码 【发布时间】:2016-03-20 05:14:08 【问题描述】:
$num = $_POST['num'];

if(filter_input(INPUT_POST,'num', FILTER_VALIDATE_INT, array("options"=>array("min_range"=>5, "max_range"=>20)))===false)  
    echo "Write a valid number between 5 and 20";    
 else  
    echo 'Great, your number is: '.$num;

【问题讨论】:

如何将数字发送到此脚本? 可能还需要修改 $num = $_GET['num']; 没关系,当我将 INPUT_POST 更改为 INPUT_GET 时,它应该返回条件 FALSE 当然我在 html 表单中指定了 method="post" 【参考方案1】:

您可以使用许多动词在您的网站和您的应用程序之间发送信息,也许最常用的是 GET 和 POST,GET 请求是您可以在 URL 上看到的请求,通常它们位于 ?符号,另一方面,POST 请求不会显示在 URL 上,但数据是“隐藏”发送的,在这种情况下,您可以看到您正在使用:

$num = $_POST['num']

如果它正在工作是因为在您的 HTML 页面中,或者在同一个 php 页面上,您有类似

的内容

<form action="mypage.php" method="post">

所以,您可以通过 _POST 而不是 _GET 获取该信息,使用的方法/动词必须在双方都匹配。

如果您尝试获取 _GET 上的值,它将不可用,因此过滤器将无法检查 http://php.net/filter_input,它明确指出:

如果未设置 variable_name 变量,则为 NULL

您正在执行 === 比较,在这种情况下不会返回 false,而是返回 NULL,因此要执行的唯一可用代码是 else 部分!

【讨论】:

我的意思是,当我将 INPUT_POST 更改为 INPUT_GET 时,它会将“if”条件设为 TRUE,并且会退出代码的“else”部分 刚刚完成我的回答,试图更好地解释它 我想我现在明白了,它返回 NULL 而不是 false,谢谢

以上是关于为啥如果我更改为 INPUT_GET 此代码将始终执行“其他”代码的主要内容,如果未能解决你的问题,请参考以下文章

当我运行此代码时,无论字符串是啥,结果始终为 24。为啥? [复制]

为啥从 ' 更改为 " 会影响此单线的行为?

我无法安装pyside [重复]

如果内容不存在,如何将此代码更改为 INSERT 而不是 UPDATE? [复制]

为啥我更喜欢使用成员初始化列表?

为啥我收到此错误关键字:自治市镇