PHP语法中如何检查“不为空”或空字符串?

75

可能是重复问题:
检查变量是否为空

一个简单的PHP问题:

我有这个语句:

if (isset($_POST["password"]) && ($_POST["password"]=="$password")) {
...//IF PASSWORD IS CORRECT STUFF WILL HAPPEN HERE
}

在这个语句之前的某个地方,我在JavaScript中使用以下代码将用户名设置为变量,同时在我的PHP中也设置:

uservariable = <?php $user = $_POST['user']; print ("\"" . $user . "\"")?>;

我想要做的是添加一个条件,确保$user不为null或空字符串(它不需要是任何特定的值,我只是不希望它为空)。请问应该如何正确地实现这个条件?

我知道这可能是一个愚蠢的问题,但我没有PHP经验。请给予建议,谢谢!


请在提问前使用搜索功能,就像您在http://stackoverflow.com/questions/ask-advice中被提示的那样。这个问题以前已经被问过并得到了回答:http://stackoverflow.com/search?q=check+for+empty+value+php - Gordon
2个回答

128

NULL还是空字符串?

if (!empty($user)) {}

使用 empty() 函数。


在意识到 $user ~= $_POST['user'] 之后(感谢 matt):

var uservariable='<?php 
    echo ((array_key_exists('user',$_POST)) || (!empty($_POST['user']))) ? $_POST['user'] : 'Empty Username Input';
?>';

看起来我对问题的理解与其他人不同...我们谈论的是$user,而不是$_POST['user'],对吧? - John Green
1
在他的代码中,$user 被赋值为 $_POST['user']。最好在赋值之前进行验证,但这并不重要。 - Matt Dodge
嗯,到底有什么区别呢?如果我做错了什么,请告诉我! - I wrestled a bear once.
@mattedgod - 很好的观点。我没注意到。 - John Green
我喜欢这种方式。我希望它是正确的。但我仍然遇到错误。意外的“;”...而且我不理解这部分:“空用户名输入”。 - I wrestled a bear once.
我打错了一个字母,漏掉了一个括号。请再试一次代码。至于“空用户名输入”,那只是我选择表示空用户变量的字符串。如果你想使用程序流来执行其他操作而不是回显它,我们需要稍微调整一下代码。 - John Green

34

使用empty()函数。它可以检查空字符串和null。

if (!empty($_POST['user'])) {
  // do stuff
}

从手册中得知:

以下内容被视为空:

"" (an empty string)  
0 (0 as an integer)  
0.0 (0 as a float)  
"0" (0 as a string)    
NULL  
FALSE  
array() (an empty array)  
var $var; (a variable declared, but without a value in a class)  

请注意,如果在 $_POST 上未设置 'user',则会收到警告。它仍然可以工作,但会快速填满日志。我通常使用以下方式来缓解这个问题: if ((array_key_exists('user',$_POST)) || (!empty($_POST['user']))) - John Green
这三个都给我报错了: - I wrestled a bear once.
如果 (isset($_POST["password"]) && ($_POST["password"]=="$password") && (array_key_exists('user',$_POST)),并且如果 (isset($_POST["password"]) && ($_POST["password"]=="$password") && (!empty($_POST['user'])),并且 (isset($_POST["password"]) && ($_POST["password"]=="$password") && (!empty('$user'))。 - I wrestled a bear once.
我没有检查日志,当我进入页面时,看到的是“第173行PHP语法错误”。 - I wrestled a bear once.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接