2012-04-18 95 views
1

我有一个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失败的解决方案。

+0

哪家运营商更好地使用'和'或''||' – Rafee 2012-04-18 10:55:05

+1

=和''&&'和'或'=''|| ..... [见这里](HTTP:/ /www.php.net/manual/en/language.operators.logical.php) – ManseUK 2012-04-18 11:00:25

+0

Rafee,它们有不同的优先级,这意味着'or'和'||'在某些情况下行为不带括号。使用'&&'和'||'几乎总是更好,并在需要时使用括号。 – 2012-04-18 11:05:24

回答

5
<?php 

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

这是最正确的,因为更明显的是做了什么。由于'isset'已经检查了NULL值,有些人可能会对其他答案中的NULL检查感到困惑(因为它是一个宽松的比较,所以它也检查其他的“空洞”)。因此这是最易读和最易维护的答案! – 2012-04-18 10:55:48

+0

是啊!感谢@EmilVikström提供简短的评论,以便了解'为什么'和为了短代码而使用stefan – Rafee 2012-04-18 11:02:00

+2

请记住,它将为...... test.php?p = 0打印“未找到”。 – VolkerK 2012-04-18 11:11:42

0
<?php 

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

?> 

你为or提到的上述代码,以便将采取的任何一个作为如下trueand

<?php 

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

?> 

尝试,也将努力完善。

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为float)
  • "0"(0作为字符串)
  • NULL
  • FALSE
  • array()(空数组)
  • var $var;(变量声明,但没有一个类中的值)
+0

尽管如此,仍然会有索引错误。 – LeonardChallis 2012-04-18 10:48:36

+2

@LeonardChallis为什么? – ManseUK 2012-04-18 10:49:32

+0

多么奇怪 - 我可以发誓说或之前,而不是...并不显示为编辑虽然:|也许另一个问题是否被删除?嗯。道歉! – LeonardChallis 2012-04-18 10:51:57

0

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

0

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

<?php 

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

不,他不能,因为它会产生未定义的索引test1 – matino 2012-04-18 10:51:42

+0

@matino:不,它不会。 Iso:已经回答。 – Stefan 2012-04-18 10:53:30

+1

是的,他可以,因为'empty()'不会警告未定义的变量,并且如果是的话只返回'TRUE'。 – Iso 2012-04-18 10:55:22