Проверьте, существует ли $ _POST

Я пытаюсь проверить, существует ли $ _POST и, если он есть, распечатать его внутри другой строки, если нет, не печатать вообще.

что-то вроде этого:

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

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

$newString = fromPerson();

Любая помощь будет отличной!

php
79 голосов | спросил eliwedel 17 AM000000120000004931 2010, 00:15:49

13 ответов


0
if( isset($_POST['fromPerson']) )
{
     $fromPerson = '+from%3A'.$_POST['fromPerson'];
     echo $fromPerson;
}
ответил ehmad 17 AM000000120000003531 2010, 00:29:35
0

Simple. У вас есть два варианта:

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

(OR),

2. Только проверяйте, доступен ли ОСОБЕННЫЙ Ключ в данных поста

if (isset($_POST['fromPerson']) )
{
    $fromPerson = '+from%3A'.$_POST['fromPerson'];
    echo $fromPerson;
}
ответил Dheeraj Bhaskar 6 +04002014-10-06T22:33:21+04:00312014bEurope/MoscowMon, 06 Oct 2014 22:33:21 +0400 2014, 22:33:21
0

Все говорят, что нужно использовать isset (), что, вероятно, подойдет вам.

Однако важно, чтобы вы понимали разницу между

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

isset($_POST['x']) вернет false первый пример, но вернет true во втором, даже если вы попытаетесь распечатать любой из них, оба вернут пустое значение.

Если ваш $_POST исходит из введенного пользователем поля /формы и оставлен пустым, Я ВЕРИМ (я не 100% хотя это наверняка), что значение будет "", но НЕ ПУСТО.

Даже если это предположение неверно (кто-то, пожалуйста, исправьте меня, если я ошибаюсь!), все же это полезно знать для будущего использования.

ответил Rafael 17 AM00000010000004831 2010, 01:15:48
0

Удивлен, что это не было упомянуто

if($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['fromPerson'])){
ответил John Magnolia 18 FebruaryEurope/MoscowbWed, 18 Feb 2015 11:45:40 +0300000000amWed, 18 Feb 2015 11:45:40 +030015 2015, 11:45:40
0
isset($_POST['fromPerson']) 
ответил h3xStream 17 AM000000120000004331 2010, 00:16:43
0
  • В этом случае использование метода isset не подходит.

Согласно документации PHP: http://php.net/manual/en/function. массив ключей 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();


  • Проверка наличия массива $ _POST необязательна, поскольку это глобальная переменная среды PHP начиная с версии 4.1.0 (в настоящее время мы не встречаем более старые версии PHP).
ответил Bronek 19 J000000Thursday12 2012, 14:12:20
0

Надлежащим способом проверки наличия ключа массива является функция 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

По поводу вашего вопроса

Правильный способ проверить, было ли отправлено значение, это использовать array_key_exists () с проверкой метода запроса

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

Но в некоторых случаях от вашей логики зависит, где isset() и empty() тоже может быть хорошо.

ответил Robert 13 PMpWed, 13 Apr 2016 16:03:07 +030003Wednesday 2016, 16:03:07
0

Все методы на самом деле не рекомендуется, это предупреждение в 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);
ответил linuxatico 5 ThuEurope/Moscow2013-12-05T12:43:12+04:00Europe/Moscow12bEurope/MoscowThu, 05 Dec 2013 12:43:12 +0400 2013, 12:43:12
0

Try

if (isset($_POST['fromPerson']) && $_POST['fromPerson'] != "") {
    echo "Cool";
}
ответил Augustus Francis 2 ndEurope/Moscowp30Europe/Moscow09bEurope/MoscowMon, 02 Sep 2013 21:53:01 +0400 2013, 21:53:01
0

Попробуйте isset ($_POST['fromPerson'])

ответил strager 17 AM000000120000001031 2010, 00:17:10
0
if (is_array($_POST) && array_key_exists('fromPerson', $_POST)) {
    echo 'blah' . $_POST['fromPerson'];
}
ответил jezmck 17 AM000000120000004431 2010, 00:25:44
0

if( isset($_POST['fromPerson']) ) верно.

Вы можете использовать функцию и вернуться, лучше, чем направлять эхо.

ответил Cristian Weiser 14 J000000Monday14 2014, 17:07:13
0

Мне нравится проверять, установлен ли он и является ли он пустым в троичном операторе.

// 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;
ответил Raymondim 3 J000000Sunday16 2016, 21:15:30

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132