Я пытаюсь проверить, существует ли $ _POST, и если это так, распечатать его внутри другой строки, если нет, не печатать вообще.
что-то вроде этого:
$fromPerson = '+from%3A'.$_POST['fromPerson'];
function fromPerson() {
if !($_POST['fromPerson']) {
print ''
} else {
print $fromPerson
};
}
$newString = fromPerson();
Любая помощь была бы замечательной!
empty()
это не правильно для выбора # 1, потому что в PHP, строка'0'
эквивалентнаfalse
- иempty()
возвращаюtrue
для всех значений эквивалентна ЛЖИ . Таким образом, при использованииempty
код пропускал бы печать, если бы значение было'0'
. Если вы хотите исключить пустую строку, см. Ответ Августа.Все говорят использовать isset () - что, вероятно, сработает для вас.
Однако важно понимать разницу между
$_POST['x'] = NULL;
и$_POST['x'] = '';
isset($_POST['x'])
вернетсяfalse
в первом примере, но вернетсяtrue
во втором, даже если вы попытаетесь распечатать любой из них, оба вернут пустое значение.Если вы
$_POST
пришли из введенного пользователем поля / формы и оставлены пустыми, Я ВЕРЮ (хотя я не уверен на 100%), что значение будет "", но НЕ NULL.Даже если это предположение неверно (кто-нибудь, пожалуйста, поправьте меня, если я ошибаюсь!), Все вышеизложенное полезно знать для будущего использования.
источник
empty()
это не правильно здесь, потому что в PHP, строка'0'
эквивалентнаfalse
- иempty()
возвращаетtrue
для всех значений эквивалентно ЛОЖЬ . Таким образом, при использованииempty
код пропускал бы печать, если бы значение было'0'
.Удивлен, что это не было упомянуто
источник
isset($_POST['fromPerson']
естьtrue
, хотяif($_SERVER['REQUEST_METHOD'] == 'POST'
естьfalse
. Если нет такой ситуации, все , что требуется , этоisset...
часть.fromPerson
может отсутствовать, но POST все еще может существовать. Вопрос был: «Если существует $ _POST». и только в примере используется $ _POST ['fromPerson']. В некоторых ситуациях, как здесь описывает @goat , даже еслиfromPerson
это имя отправки , оно может отсутствовать в POST.источник
Правильный способ проверки наличия ключа массива - это функция
array_key_exists()
Разница в том, что когда он у вас есть,
$_POST['variable'] = null
это означает, что ключ существует и был отправлен, но значение было нулевым.Другой вариант,
isset()
который будет проверять, существует ли ключ массива и был ли он установлен.Последний вариант - использовать,
empty()
который будет проверять, существует ли ключ массива, если он установлен, и если значение не считается пустым.Примеры:
Относительно вашего вопроса
Правильный способ проверить, было ли отправлено значение, - использовать array_key_exists () с проверкой метода запроса
Но бывают случаи , зависит от вашей логики , где
isset()
иempty()
может быть хорошо , как хорошо.источник
empty
. Согласно комментарию Ши на ответ Августа Фрэнсиса ,empty()
это не правильно , как альтернативный выбор, потому что в PHP, строка'0'
эквивалентнаfalse
- иempty()
возвращаюtrue
для всех значений эквивалентна ЛЖИ . Таким образом, при использованииempty
код пропускал бы печать, если бы значение было'0'
. Если вы хотите исключить пустую строку, см. Ответ Августа.isset
не подходит.Согласно документации PHP: http://php.net/manual/en/function.array-key-exists.php
(см. Пример №2 array_key_exists () vs isset () )
Метод
array_key_exists
предназначен для проверки наличия ключа в массиве.Таким образом, код в вопросе можно изменить следующим образом:
источник
isset
решения, когда поле сообщения установлено, но содержит NULL. Это хорошая альтернатива , если вы хотите разрешитьNULL
вelse
ветке. Однако , если строка нужна, это ошибка; в этой ситуацииisset
поступает правильно, но этот код - нет - он передаетNULL
значение. Более поздний ответ Роберта демонстрирует разницу.Все методы на самом деле не рекомендуются, это предупреждение в Netbeans 7.4, и, безусловно, хорошая практика не обращаться к суперглобальным переменным напрямую, вместо этого используйте фильтр
источник
isset
это намного более читабельно, чем выражение фильтра. Но спасибо, что указали на это; это полезный вариант для рассмотрения.empty
, споткнувшись из-за нечеткой типизации php; трудно представить, что доступ к $ _POST будет считаться плохим стиль).Пытаться
источник
empty($_POST['fromPerson'])
выполняет этот комбинированный тест. Легче читать и печатать :)empty('0')
возвращаетсяtrue
. Так что это не то же самое.Попробовать ?
isset
($_POST['fromPerson'])
источник
источник
is_array()
проверяет, является ли это массивом, вторая часть проверяет, есть ли в нем элемент с ключом'fromPerson'
.if( isset($_POST['fromPerson']) )
верно.Вы можете использовать функцию и return, лучше, чем направлять эхо.
источник
Мне нравится проверять, установлен ли он и пуст в тернарном операторе.
источник
empty('0')
естьtrue
. Так что лучше не иметьversion
0
, илиuserID
0
и т. Д.Я хотел бы добавить свой ответ, хотя этой ветке уже много лет и она занимает для меня высокое место в Google.
Мой лучший способ - попробовать:
Как
$_POST
и массив, если скрипт загружается и в$_POST
переменной нет данных, он будет иметь длину массива 0. Это можно использовать в операторе IF.Вам также может быть интересно, вызывает ли это ошибку "undefined index", как будто мы проверяем, установлен ли
$_POST
он ... На самом деле$_POST
всегда существует, ошибка "undefined index" появится только в том случае, если вы попытаетесь найти $ _POST значение массива, которое не существует.$_POST
всегда существует сам по себе, будучи либо пустым, либо имеет значения массива.$_POST['value']
может не существовать, что вызывает ошибку «неопределенный индекс».источник