2

我有一个test.php并且我有以下代码

<?php

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

?>

我在下面列出了 url,然后显示了所需的输出

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 1并且Test 2true 但何时Test 2以及Test 3失败的解决方案。

4

5 回答 5

6
<?php

if(!empty($_GET['p']))
    echo $_GET['p'];
else
    echo "Not found";
?>
于 2012-04-18T10:49:40.770 回答
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;(声明的变量,但在类中没有值)
于 2012-04-18T10:47:44.317 回答
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";
    }

?>

它会完美运行。

于 2012-04-18T10:47:43.380 回答
0

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

于 2012-04-18T10:47:50.180 回答
0

您应该使用empty()而不是isset().

<?php

if(empty($_GET['p'])) {
    echo "Not found";
} else {
    echo $_GET['p'];
}
于 2012-04-18T10:50:07.920 回答