2

我的网站使用PHP来检查用户使用“get”方法提交的值是否为某个整数。代码类似于

if ($_GET['input']==2) { ... }

但是我最近发现,如果用户输入类似2a,2two甚至2omdodonsos的内容,PHP 仍然会将其视为值2。但是,如果用户输入23eee23twenty或者23ofnofnonf,则不会被感知为2. 为什么会这样?将使用此代码:

 if ($_GET['input']="2") { ... }

解决这个问题?

4

3 回答 3

2

您可以(并且应该)使用输入过滤来清除错误的输入:

if (is_null($input = filter_input(INPUT_GET, 'input', FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE))) {
    // an entry that was not an integer
} elseif ($input === 2) {
    // input was 2
}

也可以看看:filter_input()

于 2013-01-22T13:03:03.257 回答
1

有关发生这种情况的解释,请阅读有关type juggling的文档。

解决方案是类型安全比较 ( ===)

$_GET['input'] === '2'
于 2013-01-22T13:04:19.767 回答
0

您可以检查 GET 值是否为数字,然后将其与数字 2 进行比较:

if (is_numeric($_GET['input']) ) {
    switch($_GET['input']) {
      case 1:
      case 2:
       // write your code here
      break;
      default:
       //Default option
     }
 }

或者按照@fab 的建议直接使用 === 比较运算符。

http://php.net/manual/en/language.operators.comparison.php

于 2013-01-22T13:04:00.927 回答