2

重複の可能性:
$ _ GETが空かどうかを確認する方法は?

URLにデータが含まれていることを確認しようとしていますが、現在これを行うために使用しているステートメントはですが$_GET、URL?var=foo&biz=bangにデータがないか、どこにも存在しない場合でも、trueが返されます。変数は常に設定されていると思いますが、これを確認するにはどうすればよいですか?ifisset($_GET) //Do something?&$_GET

「$_GETが空かどうかを確認する方法」の複製

4

3 に答える 3

7

$ _GETは常にphpで 設定されているため(Webサーバーで実行する場合)、本当に知りたいのは「そこに何かありますか?」です。

使用したい:

if ($_GET) {
}

これが機能するのは、$ _ GETが配列であり、空の配列が評価されfalse、入力された配列がであるためですtrue


アップデート

phpunit上記の方法は、テスト容易性とCLI実行コマンド( 、 )に非常に悪影響を与えるため、使用しなくなりましたartisan

私は今、常に配列をチェックisset()しています。$_GETまた、私は通常、if-php内の配列に割り当て、これらの式を割り当てられた変数の値に評価します。

フレームワークに「安全な配列アクセス」機能がある場合は、常にそれを使用する必要があります。フレームワークに「安全なGET関数」がある場合は、さらに優れています。フレームワークを使用していない場合、またはフレームワークにこれらのヘルパー関数が含まれていない場合は、自分で作成する必要があります。

// example with "safe array access"
if (isset($_GET) && $value = safe_array($_GET, 'key')) {
    // do something with $value
}

// example with "safe GET function"
if ($value = safe_input_get('key')) {
    // do something with $value
}
于 2012-10-20T00:54:25.210 に答える
4
if(!empty($_GET))
{
    // do something
}

get配列が設定されているかどうかを通知する必要があります

于 2012-10-20T00:52:56.617 に答える
0

0、0.00、falseなどが返されるため、使用empty()すると問題が発生する可能性があります(http://php.net/manual/en/function.empty.php)true

考えられる回避策:

<?php
function is_blank($value) {
    return empty($value) && !is_numeric($value);
}
if (!is_blank($_GET)){
   ... do your thing ...
}

?>

または特定の投稿値を確認しますisset($_POST['value'])

于 2012-10-20T00:59:16.513 に答える