检查 $_ POST 是否存在

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

像这样:

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


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


$newString = fromPerson();

任何帮助将是伟大的!

399617 次浏览
isset($_POST['fromPerson'])

Try isset($_POST['fromPerson'])?

if (is_array($_POST) && array_key_exists('fromPerson', $_POST)) {
echo 'blah' . $_POST['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% 肯定)该值将是“”但不是空。

即使这个假设是错误的(如果我错了,请有人纠正我!)以上仍然是好的知道,以备将来使用。

  • 在这种情况下,使用方法 isset是不合适的。

According to PHP documentation: http://php.net/manual/en/function.array-key-exists.php
(见例 # 2Array _ key _ vis () vs isset ())
array_key_exists方法用于检查数组中的键存在。

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

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


$newString = fromPerson();


  • 检查数组 $_ POST 的存在是不必要的,因为它是4.1.0版以来的 PHP 环境全局变量(现在我们没有遇到更老版本的 PHP)。

试试看

if (isset($_POST['fromPerson']) && $_POST['fromPerson'] != "") {
echo "Cool";
}

All the methods are actually discouraged, it's a warning in Netbeans 7.4 and it surely is a good practice not to access superglobal variables directly, use a Rel = “ noReferrer”> filter < a href = “ http://www.php.net/Manual/en/book.filter.php”rel = “ noReferrer”> filter instead

$fromPerson = filter_input(INPUT_POST, 'fromPerson', FILTER_DEFAULT);
if($fromPerson === NULL) { /*$fromPerson is not present*/ }
else{ /*present*/ }
var_dump($fromPerson);exit(0);

if( isset($_POST['fromPerson']) )是对的。

您可以使用函数并返回,这比直接执行 echo 更好。

很简单,你有两个选择:

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;
}

(或)

2. 只检查邮件数据中是否有特定密钥

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

我很惊讶没有被提及

if($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['fromPerson'])){

检查数组键是否存在的正确方法是函数 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

关于你的问题

检查 value 是否已发送的正确方法是使用 array _ key _ vis ()和 check of request 方法

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;

I would like to add my answer even though this thread is years old and it ranked high in Google for me.

我最好的方法就是尝试:

if(sizeof($_POST) !== 0){
// Code...
}

As $_POST is an array, if the script loads and no data is present in the $_POST variable it will have an array length of 0. This can be used in an IF statement.

您可能还想知道这是否会抛出一个“未定义索引”错误,就好像我们正在检查是否设置了 $_POST... 实际上 $_POST总是存在,只有当您尝试搜索不存在的 $_ POST 数组值时,才会出现“未定义索引”错误。

$_POST本身始终是空的或者有数组值。 $_POST['value']可能不存在,因此抛出“未定义索引”错误。

我最近想到了这个:

class ParameterFetcher
{
public function fetchDate(string $pDate):string{
$myVar = "";
try{
if(strlen($_POST[$pDate]) > 0){
$myVar = $_POST[$pDate];
}
}catch (Exception $faild){
die("field NULL or not set for $pDate");
}


[ ... other stuff ]

显然可以获得一个日期,但它可以采取任何后参数。您也可以通过这种方式检查 GET

EDIT: sorry, had typos in it