Php 检查$u POST是否存在
我试图检查$u POST是否存在,如果存在,则在另一个字符串中打印,如果不存在,则根本不打印 大概是这样的:Php 检查$u POST是否存在,php,Php,我试图检查$u POST是否存在,如果存在,则在另一个字符串中打印,如果不存在,则根本不打印 大概是这样的: $fromPerson = '+from%3A'.$_POST['fromPerson']; function fromPerson() { if !($_POST['fromPerson']) { print '' } else { print $fromPerson }; } $newString = fromPerson(
$fromPerson = '+from%3A'.$_POST['fromPerson'];
function fromPerson() {
if !($_POST['fromPerson']) {
print ''
} else {
print $fromPerson
};
}
$newString = fromPerson();
任何帮助都会很好 试试
($\u POST['fromPerson'])
?每个人都说要使用isset()-这可能对你有用
isset($_POST['fromPerson'])
然而,重要的是你要理解两者之间的区别
$\u POST['x']=NULL代码>和$\u POST['x']=''代码>
isset($\u POST['x'])
将在第一个示例中返回false
,但在第二个示例中返回true
,即使您尝试打印其中一个,两者都将返回空值
如果您的$\u POST
来自用户输入的字段/表单,并且为空,我相信(尽管我对此不是100%确定)该值将为“”,但不为空
即使这个假设是不正确的(如果我错了,请有人纠正我!),上述内容仍然值得了解,以备将来使用。
- 在这种情况下,使用方法
isset
是不合适的
根据PHP文档:
(参见示例#2 array_key_exists()vs isset())
方法array\u key\u exists
用于检查数组中是否存在密钥
因此,问题中的代码可以更改如下:
function fromPerson() {
if (array_key_exists('fromPerson', $_POST) == FALSE) {
return '';
} else {
return '+from%3A'.$_POST['fromPerson'];
};
}
$newString = fromPerson();
- 不需要检查数组$\u POST的存在,因为它是自版本4.1.0以来的PHP环境全局变量(现在我们不满足PHP的旧版本)
试试看
if (isset($_POST['fromPerson']) && $_POST['fromPerson'] != "") {
echo "Cool";
}
实际上,所有这些方法都不鼓励使用,这是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);
if(设置($\u POST['fromPerson'])
是正确的
您可以使用函数并返回,比直接返回更好。Simple。您有两个选择:
1.检查是否有任何post数据
(或)
2.仅检查post数据中是否存在特定密钥
很惊讶没有人提到
if($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['fromPerson'])){
检查数组键是否存在的正确方法是函数array\u key\u exists()
不同之处在于,当您有$\u 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
关于你的问题
检查值是否已发送的正确方法是使用数组\键\存在()和请求检查方法
if ($_SERVER['REQUEST_METHOD'] == 'POST' && array_key_exists('fromPerson', $_POST)
{
// logic
}
但是有一些情况取决于您的逻辑,isset()
和empty()
也可以很好地解决。我喜欢在三元运算符中检查它是否设置以及是否为空
// 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;
我想添加我的答案,即使这个帖子已经有年历史了,而且对我来说在谷歌排名很高
我最好的方法是尝试:
if(sizeof($_POST) !== 0){
// Code...
}
由于$\u POST
是一个数组,如果脚本加载且$\u POST
变量中不存在数据,则其数组长度将为0。这可以在IF语句中使用
您可能还想知道这是否会引发“未定义索引”错误,因为我们正在检查是否设置了$\u POST
。。。实际上,$\u POST
总是存在的,只有当您尝试搜索不存在的$\u POST数组值时,“未定义索引”错误才会出现
$\u POST
本身始终存在,要么为空,要么具有数组值。
$\u POST['value']
可能不存在,因此引发“未定义索引”错误。is\u数组($\u POST)是否检查POST中是否存在任何值?在我的应用程序中,我正在尝试在执行其他操作之前确定是否有帖子。请参阅我的编辑is_array()
检查它是否是数组,第二部分检查它是否有一个键为'fromPerson'
的项。empty()检查变量是否存在和非空值,因此当空字符串返回false时,这就是要使用的函数。@HanDijk-根据Shi的评论,empty()
在这里是不正确的,因为在php中,字符串'0'
相当于false
-并且empty()
对于所有等效于false的值返回true
。因此,使用empty
,如果值为'0'
,代码将跳过打印。为什么?如果服务器方法不是POST,则不会设置POST变量,因此只需要后半部分。我错了吗?@ToolmakerSteve在大多数情况下是的,这就足够了,但我的答案并不总是显示另一种方法。如果你有一个带有复选框的表单,并且提交时没有名字,那么它也会起作用。请描述一种情况,其中设置($\u POST['fromPerson']
是真的
,即使如果($\u SERVER['REQUEST\u METHOD']=='POST'
是false
。除非出现这种情况,否则所需要的只是的设置…
部分。是的,但情况正好相反。fromPerson
可能不存在,但POST可能仍然存在。问题是,“如果$\u POST存在。”仅在一个示例中,$\u POST['fromPerson']在某些情况下,即使<代码> Fuffer-<代码>是一个提交名称,它可能不存在于POST中。另一方面,代码的可读性也很重要。IMHO、<代码> ISSET/<代码>比过滤器表达式更可读。但是谢谢您指出这一点;它是一个值得考虑的选项。myIsset/2包装器metod使用过滤器,但具有isset/2的行为“实际上不鼓励使用所有方法”-这是一个强有力的声明(即使NetBeans标记为警告)。您是否有指向权威来源的链接,不鼓励直接引用$\u POST?(关于php,有很多是为了方便而不是为了严谨而设计的——看看m
$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
if ($_SERVER['REQUEST_METHOD'] == 'POST' && array_key_exists('fromPerson', $_POST)
{
// logic
}
// 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;
if(sizeof($_POST) !== 0){
// Code...
}