Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 检查$u POST是否存在_Php - Fatal编程技术网

Php 检查$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(

我试图检查$u POST是否存在,如果存在,则在另一个字符串中打印,如果不存在,则根本不打印

大概是这样的:

$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...
}