Answers:
//Note: This resolves as true even if all $_POST values are empty strings
if (!empty($_POST))
{
// handle post data
$fromPerson = '+from%3A'.$_POST['fromPerson'];
echo $fromPerson;
}
if (isset($_POST['fromPerson']) )
{
$fromPerson = '+from%3A'.$_POST['fromPerson'];
echo $fromPerson;
}
每个人都在说使用isset()-这可能对您有用。
但是,重要的是要了解
$_POST['x'] = NULL;
和 $_POST['x'] = '';
isset($_POST['x'])
将false
在第一个示例上返回,但是true
即使您尝试打印任何一个,也将在第二个示例上返回,但两者都将返回空白值。
如果您$_POST
来自用户输入的字段/表单,并且留空,那么我相信(尽管我不能100%肯定)该值将为“”,但不能为NULL。
即使这个假设是错误的(如果我错了,请有人纠正我!)以上内容对于将来的使用仍然是一个很好的了解。
empty()
是不是在这里正确的,因为在PHP中,字符串'0'
相当于false
-和empty()
回报true
为相当于所有的值设置为false。因此,使用时empty
,如果值为,代码将跳过打印'0'
。
惊讶它没有被提及
if($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['fromPerson'])){
isset($_POST['fromPerson']
是true
,即使if($_SERVER['REQUEST_METHOD'] == 'POST'
是false
。除非有这种情况,否则只需要isset...
一部分。
检查数组键是否存在的正确方法是function array_key_exists()
区别在于,当您拥有 $_POST['variable'] = null
它它意味着该键存在并已发送,但值为null
另一个选择是 isset()
哪个将检查数组键是否存在以及是否已设置
最后一个选择是使用 empty()
,它将检查是否设置了数组键以及是否将值视为空值。
例子:
$arr = [
'a' => null,
'b' => '',
'c' => 1
];
array_key_exists('a', $arr); // true
isset($arr['a']); // false
empty($arr['a']); // true
array_key_exists('b', $arr); // true
isset($arr['b']); // true
empty($arr['b']); // true
array_key_exists('c', $arr); // true
isset($arr['c']); // true
empty($arr['c']); // false
关于你的问题
检查值是否已发送的正确方法是将array_key_exists()与请求方法的检查一起使用
if ($_SERVER['REQUEST_METHOD'] == 'POST' && array_key_exists('fromPerson', $_POST)
{
// logic
}
但是有些情况取决于您的逻辑,在哪里isset()
也empty()
可能是好的。
empty
。按照施的评论在奥古斯弗朗西斯的回答,empty()
是不是作为一种替代的选择是正确的,因为在PHP中,字符串'0'
相当于false
-和empty()
回报true
为相当于所有的值设置为false。因此,使用时empty
,如果值为,代码将跳过打印'0'
。如果要排除空字符串,请参见Augustus答案。
isset
不合适。根据PHP文档:http : //php.net/manual/en/function.array-key-exists.php
(请参见示例2# array_key_exists()与isset())
该方法array_key_exists
用于检查数组中的键是否存在。
因此,可以将问题中的代码更改如下:
function fromPerson() {
if (array_key_exists('fromPerson', $_POST) == FALSE) {
return '';
} else {
return '+from%3A'.$_POST['fromPerson'];
};
}
$newString = fromPerson();
isset
当设置post字段但包含NULL时,此代码的行为才与解决方案有所不同。如果要允许进入分支,这是一个很好的选择。但是,如果需要一个字符串,这是一个错误;在这种情况下,做正确的事,但是此代码不行-它将传递值。罗伯特(Robert)后来的回答证明了差异。NULL
else
isset
NULL
所有这些方法实际上是鼓励,它在Netbeans的7.4警告,它肯定是一个很好的做法不直接访问超全局变量,使用过滤器代替
$fromPerson = filter_input(INPUT_POST, 'fromPerson', FILTER_DEFAULT);
if($fromPerson === NULL) { /*$fromPerson is not present*/ }
else{ /*present*/ }
var_dump($fromPerson);exit(0);
isset
比过滤器表达式更具可读性。但是,谢谢您指出这一点;这是一个有用的选择。
empty
,被php的松散输入绊倒了;很难想象访问$ _POST会被认为是差劲的。风格。)
尝试
if (isset($_POST['fromPerson']) && $_POST['fromPerson'] != "") {
echo "Cool";
}
empty($_POST['fromPerson'])
此组合测试。更易于阅读和输入:)
empty('0')
返回true
。所以不一样。
if( isset($_POST['fromPerson']) )
是正确的。
您可以使用函数并返回,而不是直接引导回声。
我想检查它是否已设置,并且在三元运算符中是否为空。
// POST variable check
$userID = (isset( $_POST['userID'] ) && !empty( $_POST['userID'] )) ? $_POST['userID'] : null;
$line = (isset( $_POST['line'] ) && !empty( $_POST['line'] )) ? $_POST['line'] : null;
$message = (isset( $_POST['message'] ) && !empty( $_POST['message'] )) ? $_POST['message'] : null;
$source = (isset( $_POST['source'] ) && !empty( $_POST['source'] )) ? $_POST['source'] : null;
$version = (isset( $_POST['version'] ) && !empty( $_POST['version'] )) ? $_POST['version'] : null;
$release = (isset( $_POST['release'] ) && !empty( $_POST['release'] )) ? $_POST['release'] : null;
empty('0')
是true
。所以,最好不要有version
0
,或userID
0
等
我想补充一下我的答案,即使这个主题已经存在多年并且对我来说在Google中排名很高。
我最好的方法是尝试:
if(sizeof($_POST) !== 0){
// Code...
}
与$_POST
数组一样,如果脚本加载并且没有数据存在$_POST
变量中数组长度为0。可在IF语句中使用它。
您可能还想知道这是否引发“未定义索引”错误,好像我们正在检查是否$_POST
已设置...实际上$_POST
始终存在,仅当您尝试搜索$ _POST时才会出现“未定义索引”错误数组值不存在。
$_POST
总是存在本身为空或具有数组值。
$_POST['value']
可能不存在,从而引发“未定义索引”错误。
empty()
是不是对的选择#1是正确的,因为在PHP中,字符串'0'
相当于false
-和empty()
回报true
为相当于所有的值设置为false。因此empty
,如果值为,则代码将跳过打印'0'
。如果要排除空字符串,请参见Augustus答案。