2

私のサイトでは、PHP を使用して、ユーザーが「get」メソッドを使用して送信した値が特定の整数であるかどうかを確認しています。コードは次の行に沿ったものです

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

2aただし、ユーザーが、2twoまたは のようなものを入力した場合でも、 PHP によって2omdodonsos値として認識されることを最近発見しました。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

なぜこのようなことが起こるのかについては、型ジャグリングに関するドキュメントを読んでください。

解決策は型安全な比較です ( ===)

$_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 に答える