4

次のようなページがあります。

http://sitename/gallery.php?page=2

下部に、参照できるページネーション リンクがあります。ページ番号がクリックされるたびに、パラメータpage=1またはpage=2などを含む GET リクエストが送信されます ...

これらの値を変数$pageから保存すると、文字列値になります。次のよう$_GETに使用して整数に変換できます。(int)

if(!empty($_GET['page'])){
       $page = (int)$_GET['page'];
       echo "Page Number: ".$page;
}

しかし、渡された値が整数のみであり、他のがらくたではないことを確認するにはどうすればよいですか?

4

9 に答える 9

18

フィルタの使用:

if (null !== ($page = filter_input(INPUT_GET, 'page', FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE))) {
    // $page is now an integer
}

これにより、変数がクエリ文字列に同時に現れるかどうかもチェックされます。欠落と無効を区別したい場合は、最後の引数を省略しなければなりませんfilter_input():

$page = filter_input(INPUT_GET, 'page', FILTER_VALIDATE_INT);
// $page can be null (not present), false (present but not valid) or a valid integer
于 2012-08-30T09:59:58.943 に答える
4

フィルタを付けて使用filter_var()FILTER_VALIDATE_INT、戻り値を確認してください。

于 2012-08-30T09:55:16.527 に答える
2

is_numeric()を使用します。

is_int()GET パラメータは常に文字列であるため、機能しません。

于 2012-08-30T09:58:13.483 に答える
1

これは、パラメーターが整数かどうかを確認する方法です。

if (is_int((int) $_GET['user_id']) && (int) $_GET['user_id'] != 0) {
    $user_id = $_GET['user_id'];
}
于 2014-01-24T07:30:38.863 に答える
1

私はあちこちにいくつかのコメントを残しました。型付けが弱いため、emptyやのような関数issetは信頼できない傾向があります。パラメータが int か IMO でないかを確認する最も簡単な方法は次のとおりです。

if (array_key_exists('page',$_GET) && ($_GET['page'] == (int) $_GET['page']))

int にキャストしてからそれぞれの値を比較すると、有効な int の場合にのみ true が返され$_GET['page'] ます。何らかの理由で厳密な型比較を使用したい場合 (そうする人もいます)、次のように二重キャストできます。

if (array_key_exists('page',$_GET) && ($_GET['page'] === (string)((int) $_GET['page'])))

しかし、この特定のケースでは、なぜそれをしたいのか、私にはよくわかりません

于 2012-08-30T10:10:29.187 に答える
0

おそらく、使用してis_intも役に立ちません。すべての受信パラメーター ($_GET および $_POST を含む) は、PHP によって文字列として解析されます。このis_int関数は、値ではなくデータ型をチェックします。ctype_digitただし、数字のみをチェックします。

if(isset($_GET['page']) && ctype_digit($_GET['page']){
   $page = (int)$_GET['page'];
   echo "Page Number: ".$page;
}
于 2012-08-30T09:57:46.790 に答える
0
if(!empty($_GET['page']) and is_numeric($_GET['page'])){
       $page = (int)$_GET['page'];
       echo "Page Number: ".$page;
}

is_numericはおそらく必要なものです。

于 2012-08-30T09:58:03.203 に答える
0

で確認することもできます

isNAN($_GET['something']);//is_numeric($_GET['something'])

ブール値(true、flase)を返します... trueの場合は整数ではなく、falseの場合は整数です。

于 2012-08-30T10:11:41.557 に答える