$ _GET显示空值

时间:2012-04-18 10:46:08

标签: php

我有一个test.php,我有以下代码

<?php

    if(isset($_GET['p']) or $_GET['p'] != null) {
        echo $_GET['p'];
    } else {
        echo "Not found";
    }

?>

我已列出以下网址,然后要求输出显示

Test 1 : http://localhost/example/test.php
output : Notice: Undefined index: p in R:\xampp\htdocs\example\test.php on line 3
        Not found


Test 2 : http://localhost/example/test.php?p
output : blank page



Test 3 : http://localhost/example/test.php?p=
output : blank page


Test 4 : http://localhost/example/test.php?p=1
output : 1

我接受Test 1Test 2true 但是当Test 2Test 3未能解决问题时。

5 个答案:

答案 0 :(得分:5)

<?php

if(!empty($_GET['p']))
    echo $_GET['p'];
else
    echo "Not found";
?>

答案 1 :(得分:1)

if(isset($_GET['p']) and $_GET['p'] != null) {
    echo $_GET['p'];
} else {
    echo "Not found";
}

您需要and,因为您要检查它是否已设置且不为空。

正如其他人所指出的那样 - 您可以使用empty()

if(!empty($_GET['p'])) {
    echo $_GET['p'];
} else {
    echo "Not found";
}

当值为空时,这将返回true,以下内容被视为空:

  • ""(空字符串)
  • 0(0为整数)
  • 0.0(0作为浮动)
  • "0"(0为字符串)
  • NULL
  • FALSE
  • array()(空数组)
  • var $var;(声明的变量,但类中没有值)

答案 2 :(得分:0)

<?php

    if(isset($_GET['p']) and $_GET['p'] != null) {
        echo $_GET['p'];
    } else {
        echo "Not found";
    }

?>

您提到的上述代码为or,因此它将采用true中的任何一项 试试and

<?php

    if(isset($_GET['p']) and $_GET['p'] != null) {
        echo $_GET['p'];
    } else {
        echo "Not found";
    }

?>

它会完美无缺。

答案 3 :(得分:0)

您正在使用OR,因此第二次测试将始终运行。意思是,如果没有设置它仍然会尝试访问它。您可以使用AND代替(&&),这样它只会检查值是否存在。

答案 4 :(得分:0)

您应该使用empty()代替isset()

<?php

if(empty($_GET['p'])) {
    echo "Not found";
} else {
    echo $_GET['p'];
}