我有一个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 1
和Test 2
为true
但是当Test 2
和Test 3
未能解决问题时。
答案 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'];
}