我在某处读到isset()
函数将空字符串视为TRUE
,因此isset()
不是从HTML表单验证文本输入和文本框的有效方法。
因此,您可以使用empty()
检查用户是否输入了某些内容。
isset()
函数将空字符串视为TRUE
是真的吗?
那么我应该在哪些情况下使用isset()
?我是否应该始终使用!empty()
检查是否有什么内容?
例如,而不是
if(isset($_GET['gender']))...
使用此
if(!empty($_GET['gender']))...
答案 0 :(得分:99)
FTA:
“isset()检查变量是否有 值包括(False,0或空 string),但不是NULL。返回TRUE 如果var存在;否则就错了。
另一方面是empty()函数 检查变量是否为空 value空字符串,0,NULL或 假。如果var有一个,则返回FALSE 非空和非零值。“
答案 1 :(得分:27)
以最一般的方式:
回答问题1 :
$str = '';
var_dump(isset($str));
给出
boolean true
因为变量$str
存在。
问题2 :
您应该使用isset来确定变量是否存在;例如,如果您将某些数据作为数组获取,则可能需要检查该数组中是否存在键。
例如,考虑$_GET
/ $_POST
。
现在,要了解它的价值,当你知道有这样的价值时:那就是empty
的工作。
答案 2 :(得分:11)
isset
仅用于变量,而不仅仅用于值,因此isset("foobar")
会引发错误。从PHP 5.5开始,empty
支持变量和表达式。
所以你的第一个问题应该是isset
为一个包含空字符串的变量返回 true 。答案是:
$var = "";
var_dump(isset($var));
PHP手册中的type comparison tables对于这些问题非常方便。
isset
基本上检查变量是否具有 null 以外的任何值,因为不存在的变量始终具有值 null 。 empty
是isset
的反对部分,但也会将整数值0
和字符串值"0"
视为空。 (再次,看看type comparison tables。)
答案 3 :(得分:10)
两者都不是检查有效输入的好方法。
isset()
是不够的,因为 - 如前所述 - 它认为空字符串是有效值。! empty()
也不够,因为它拒绝'0',这可能是一个有效值。使用isset()
结合对空字符串的相等性检查是验证传入参数是否具有值而不创建错误否定所需的最低要求:
if( isset($_GET['gender']) and ($_GET['gender'] != '') )
{
...
}
但是,“最低限度”,我的意思是。以上所有代码都确定$_GET['gender']
是否有值。 不确定$_GET['gender']
的值是否有效(例如,("Male", "Female",
"FileNotFound"
)
之一
为此,请参阅Josh Davis's answer。
答案 4 :(得分:3)
isset()不是从HTML表单验证文本输入和文本框的有效方法
您可以重写,因为“isset()不是验证输入的方法。”要验证输入,请使用PHP的filter extension。 filter_has_var()
会在filter_input()
实际过滤和/或清理输入时告诉您变量是否存在。
请注意,您不必在filter_has_var()
之前使用filter_input()
,如果您要求设置未设置的变量,filter_input()
将只返回null
。
答案 5 :(得分:3)
如果你有一个$ _POST ['param']并假设它是字符串类型,那么
isset($_POST['param']) && $_POST['param'] != '' && $_POST['param'] != '0'
与
相同!empty($_POST['param'])
答案 6 :(得分:2)
isset用于确定某个实例是否存在,如果某个变量已被实例化...它不关心参数的值......
Pascal MARTIN ...... +1 ...
如果变量不存在,empty()不会生成警告...因此,当您打算修改变量时,测试变量是否存在时,首选isset()...
答案 7 :(得分:2)
何时以及如何使用:
True 表示0,1,空字符串,包含值的字符串,true,false
错误表示null
例如
$status = 0
if (isset($status)) // True
$status = null
if (isset($status)) // False
False 表示1,包含值为true的字符串
True 表示null,空字符串,0,false e.g
$status = 0
if(empty($status)) // true
$status = 1
if(empty($status)) // False
答案 8 :(得分:1)
isset($variable) === (@$variable !== null)
empty($variable) === (@$variable == false)
答案 9 :(得分:1)
我来这里是为了寻找一种快速的方法来检查变量中是否包含任何内容。这里没有答案提供完整的解决方案,所以这里是:
检查输入是''
还是null
就足够了,因为:
请求网址.../test.php?var=
产生$_GET['var'] = ''
请求网址.../test.php
产生$_GET['var'] = null
isset()
仅在变量存在且未设置为false
时返回null
,因此,如果使用它,空字符串({{ 1}})。
true
认为''
和empty()
都为空,但也认为null
为空,这在某些用例中是一个问题。
如果要将''
视为空,请使用'0'
。否则,请使用以下检查:
'0'
仅对以下输入求和为empty()
:
$var .'' !== ''
false
''
我使用以下检查也过滤出仅包含空格和换行符的字符串:
null
答案 10 :(得分:0)
请考虑行为可能在不同的PHP版本上发生变化
来自文档
isset()如果var存在并且具有除NULL以外的其他任何值,则返回TRUE。否则为FALSE https://www.php.net/manual/en/function.isset.php
empty()不存在或者其值等于FALSE https://www.php.net/manual/en/function.empty.php
(empty($ x)==(!isset($ x)||!$ x))//返回true;
(!empty($ x)==(isset($ x)&& $ x))//返回true;
答案 11 :(得分:0)
!空将解决问题。如果只需要检查数据是否存在,则可以使用 isset 其他空可以处理其他验证
"ER_FK_INDEX_PARENT: Failed to add the foreign key constraint. Missing index for constraint 'statistics_ibfk_3' in the referenced table 'analytics'"
?>
答案 12 :(得分:0)
答案 13 :(得分:0)
$var = '';
// Evaluates to true because $var is empty
if ( empty($var) ) {
echo '$var is either 0, empty, or not set at all';
}
// Evaluates as true because $var is set
if ( isset($var) ) {
echo '$var is set even though it is empty';
}
来源:Php.net
答案 14 :(得分:0)
isset()用于检查变量是否设置了值,而Empty()用于检查给定变量是否为空。
当变量不为null时,isset()返回true,而如果变量是空字符串,则Empty()返回true。
答案 15 :(得分:0)
我使用以下内容来避免通知,这检查是否在GET或POST上声明了var,并且使用@前缀可以安全地检查是否为空,并且如果未设置var则避免通知:
if( isset($_GET['var']) && @$_GET['var']!='' ){
//Is not empty, do something
}
答案 16 :(得分:0)
使用empty
就足够了:
if(!empty($variable)){
// Do stuff
}
此外,如果您想要一个整数值,也可能需要检查intval($variable) !== FALSE
。