if(isset($_POST['submit'])) {
if(!isset($_POST['userName'])) {
$username = 'Anonymous';
}
else $username = $_POST['userName'];
}
我无法让$username
成为“匿名”?它为空白或$_POST['userName']
的值。
答案 0 :(得分:39)
isset()
将返回true。如果您的表单字段的name
值设置为userName
,则在提交该表单时,该值将始终为“已设置”,但其中可能没有任何数据。
相反,trim()
字符串并测试其长度
if("" == trim($_POST['userName'])){
$username = 'Anonymous';
}
答案 1 :(得分:39)
如果表单已成功提交,则应始终设置$_POST['userName']
,但它可能包含空字符串,这与未设置完全不同。而是检查它是否是empty()
if (isset($_POST['submit'])) {
if (empty($_POST['userName'])) {
$username = 'Anonymous';
} else {
$username = $_POST['userName'];
}
}
答案 2 :(得分:9)
要检查属性是否存在,无论值如何,请使用:
if (array_key_exists('userName', $_POST)) {}
要检查属性是否已设置(属性是否存在且值不是null
或false
),请使用:
if (isset($_POST['userName'])) {}
检查属性是否已设置且不为空(不是空字符串,0
(整数),0.0
(浮点),'0'
(字符串),{{1} },null
或false
(空数组)),使用:
[]
答案 3 :(得分:4)
问题:检查$ _POST值是否为为空。
翻译:检查数组键/索引是否有与之关联的值。
答案:取决于你对安全的重视。取决于允许什么作为有效输入。
1. Some people say use empty().
从PHP手册:“[Empty]确定变量是否被认为是空的。如果变量不存在或者其值等于FALSE,则该变量被认为是空的。”因此以下被认为是空的。
"" (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; (a variable declared, but without a value)
如果这些值都不适用于您的输入控件,则empty()
将起作用。这里的问题是empty()
可能过于宽泛一致使用(同样的原因,出于同样的原因,对$_POST
或{{1}的不同输入控制提交}})。好好利用$_GET
来检查整个数组是否为空(没有元素)。
empty()
2. Some people say use isset().
(语言结构)无法在整个数组上运行,如isset()
中所示。它只能在变量和数组元素(通过索引/键)上运行:isset($myArray)
和isset($var)
。 isset($_POST['username'])
语言构造做了两件事。首先,它检查变量或数组索引/键是否具有与之关联的值。其次,它检查以确保该值不等于PHP NULL值。
简而言之,使用isset()
可以最好地完成最准确的检查,因为某些输入控件在未选中或选中时甚至不会注册$ _POST。我从来不知道提交PHP NULL值的表单。我没有,所以我使用isset()
来检查isset()
键是否没有与之关联的值(并且不是NULL)。 $_POST
是一个更严格的空虚测试(在您的问题意义上),而不是isset()
。
empty()
您可以在if中测试任何评估为 true 或 false 的内容 声明。空数组的计算结果为false,因此变量也是如此 没有设置。包含PHP NULL值的变量也会计算为 假。不幸的是,在这种情况下,与
3. Some people say just do if($var), if($myArray), or if($myArray['userName']) to determine emptiness.
一样,还有更多 事情也评估为假:1。空字符串'',零(0), zero.zero(0.0),字符串零'0',布尔值false,某些为空 XML对象。- Doyle,从PHP 5.3开始
总之,使用empty()
并考虑将其与其他测试结合使用。例如:
由于超级全局的螺旋性可能无法正常工作,但毫无疑问可以用于其他阵列。
isset()
因此,在您确定if (is_array($_POST) && !empty($_POST)) {
// Now test for your successful controls in $_POST with isset()
}
代表一个数组并且根本没有存储任何值(很多人没有考虑过)之前,为什么要查找与某个键相关的值?请记住,人们可以在不使用Web浏览器的情况下将数据发送到表单。您可能有一天会到达测试点$_POST
只有允许的密钥,但该会话是另一天。
有用的参考:
答案 4 :(得分:2)
改变这个:
if(isset($_POST['submit'])){
if(!(isset($_POST['userName']))){
$username = 'Anonymous';
}
else $username = $_POST['userName'];
}
对此:
if(!empty($_POST['userName'])){
$username = $_POST['userName'];
}
if(empty($_POST['userName'])){
$username = 'Anonymous';
}
答案 5 :(得分:2)
我对这些用例使用简单的一行比较
$username = !empty(trim(isset($_POST['userName'])?$_POST['userName']:''))?$_POST['userName']:'Anonymous';
这是针对用例,您确定错误记录已关闭,因此您不会收到有关变量未初始化的警告。
这是偏执狂版本:
$_POST
这会检查是否设置了SELECT date(timestamp) as date, ID, count(*) as cnt_downloads,
sum(cnt_downloads) over (partition by ID) as total_downl,
count(*) over (partition by ID) as total_appear,
(sum(cnt_downloads) over (partition by ID)) / (count(*) over (partition by ID)) as avg_dowl
FROM [default.download_activity]
where date(timestamp) >= '2016-01-04' and date(timestamp) <= '2016-01-20'
group by date,two_hour, ID
变量。在访问它之前。
答案 6 :(得分:1)
isset正在测试您在哈希(或关联数组)中检查的密钥是否为“set”。在此上下文中设置仅表示它是否知道该值。没有什么是价值。所以它被定义为一个空字符串。
因此,只要您有一个名为userName的输入字段,无论它们是否填写,都是如此。你真正想做的是检查userName是否等于空字符串''
答案 7 :(得分:1)
$username = filter_input(INPUT_POST, 'userName', FILTER_SANITIZE_STRING);
if ($username == '') {$username = 'Anonymous';}
最佳实践-始终过滤输入,清理字符串是可以的,但是最好使用自定义回调函数来真正过滤掉不可接受的内容。 然后检查now-safe变量是否为null / empty,如果是,则将其设置为Anonymous。如果第一行中存在'else'语句,则不需要它。