检查$ _POST是否存在

eli*_*del 91 php

我正在尝试检查是否存在$ _POST,如果存在,则将其打印在另一个字符串中,如果不存在,则根本不打印.

这样的事情:

$fromPerson = '+from%3A'.$_POST['fromPerson'];

function fromPerson() {
    if !($_POST['fromPerson']) {
        print ''
    } else {
        print $fromPerson
    };
}

$newString = fromPerson();
Run Code Online (Sandbox Code Playgroud)

任何帮助都会很棒!

ehm*_*mad 154

if( isset($_POST['fromPerson']) )
{
     $fromPerson = '+from%3A'.$_POST['fromPerson'];
     echo $fromPerson;
}
Run Code Online (Sandbox Code Playgroud)


Dhe*_*kar 54

简单.你有两个选择:

1.检查是否有任何发布数据

//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;
}
Run Code Online (Sandbox Code Playgroud)

(要么)

2.仅检查发布数据中是否有特定密钥

if (isset($_POST['fromPerson']) )
{
    $fromPerson = '+from%3A'.$_POST['fromPerson'];
    echo $fromPerson;
}
Run Code Online (Sandbox Code Playgroud)


小智 32

每个人都说要使用isset() - 这可能对你有用.

但是,了解它们之间的区别非常重要

$_POST['x'] = NULL;$_POST['x'] = '';

isset($_POST['x'])将返回false第一个示例,但将返回true第二个示例,即使您尝试打印其中任何一个,两者都将返回空值.

如果您$_POST来自用户输入的字段/表单并且留空,我相信(我不是100%肯定),该值将是""但不是NULL.

即使这个假设是不正确的(如果我错了,有人请纠正我!)以上对于将来使用仍然是好的.

  • empty()检查变量是否存在以及非空值,这样当空字符串返回false时使用的函数. (4认同)

Joh*_*lia 29

惊讶它没有被提及

if($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['fromPerson'])){
Run Code Online (Sandbox Code Playgroud)

  • 为什么?如果服务器方法不是POST,那么POST变量将不会被设置,所以下半部分就是所需要的.我错了吗? (2认同)
  • @ToolmakerSteve是的,在大多数情况下这已经足够了,但并不总是我的答案是展示另一种可以完成的方法。 (2认同)
  • 描述`isset($ _ POST ['fromPerson']`是'true`的情况,即使`if($ _ SERVER ['REQUEST_METHOD'] =='POST'`为'false`.除非出现这种情况,所需要的只是`isset ...'部分. (2认同)

Rob*_*ert 12

检查数组键是否存在的正确方法是函数 array_key_exists()

区别在于,当你拥有$_POST['variable'] = 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
Run Code Online (Sandbox Code Playgroud)

关于你的问题

检查值是否已发送的正确方法是使用array_key_exists()并检查请求方法

if ($_SERVER['REQUEST_METHOD'] == 'POST' && array_key_exists('fromPerson', $_POST)    
{
   // logic
}
Run Code Online (Sandbox Code Playgroud)

但是有些情况取决于你的逻辑在哪里isset(),empty()也可以很好.


Bro*_*nek 9

  • 在那种情况下使用方法isset是不合适的.

根据PHP文档:http://php.net/manual/en/function.array-key-exists.php
(参见示例#2 array_key_exists()vs isset())
该方法array_key_exists用于检查数组中的密钥存在.

因此,问题中的代码可以更改如下:

function fromPerson() {
   if (array_key_exists('fromPerson', $_POST) == FALSE) {
        return '';
   } else {
        return '+from%3A'.$_POST['fromPerson'];
   };
}

$newString = fromPerson();
Run Code Online (Sandbox Code Playgroud)


  • 检查数组$ _POST的存在是不必要的,因为它是自4.1.0版本以来的PHP环境全局变量(现在我们不满足旧版本的PHP).


lin*_*ico 6

实际上不鼓励使用所有方法,这是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);
Run Code Online (Sandbox Code Playgroud)


Aug*_*cis 5

尝试

if (isset($_POST['fromPerson']) && $_POST['fromPerson'] != "") {
    echo "Cool";
}
Run Code Online (Sandbox Code Playgroud)