$ _POST 존재 여부 확인


100

$ _POST가 있는지 확인하고있는 경우 다른 문자열 안에 인쇄하고 그렇지 않은 경우 전혀 인쇄하지 않습니다.

이 같은:

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

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

$newString = fromPerson();

어떤 도움이라도 좋을 것입니다!

답변:


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

60

단순한. 두 가지 선택이 있습니다.

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

시의 의견에 따라 아우구스투스 프란시스의 대답에 , empty()입니다 하지 PHP에서 문자열이 있기 때문에, 선택 # 1에 대한 올바른 '0'에 해당 false하고 - empty()반환 true을위한 false로 모든 값을 해당 . 따라서를 사용 empty하면 값이이면 코드가 인쇄를 건너 뜁니다 '0'. 빈 문자열을 제외하려면 Augustus 답변을 참조하십시오.
ToolmakerSteve

33

모두가 isset ()을 사용하라고 말하고 있습니다-아마도 당신에게 도움이 될 것입니다.

그러나 다음의 차이점을 이해하는 것이 중요합니다.

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

isset($_POST['x'])반환 false첫 번째 예제에서,하지만 돌아갑니다 true당신은 둘 중 하나를 인쇄하려고하면, 모두가 빈 값을 반환에도 불구하고 두 번째에.

당신이 경우 $_POST비워을 사용자가 입력 필드 / 양식에서오고입니다, 나는 NULL을 "(나는이 생각에 100 % 확신하지 않다) 값이 될 것이라고 믿는다"하지만.

그 가정이 틀린 경우에도 (내가 틀렸다면 누군가 나를 고쳐주세요!) 위의 내용은 향후 사용을 위해 알아두면 좋습니다.


4
empty ()는 변수 존재와 비어 있지 않은 값을 확인하므로 빈 문자열이 false를 반환해야 할 때 사용할 함수입니다.
Han Dijk

1
@HanDijk는 -시의 의견에 따라 아우구스투스 프란시스의 대답에 , empty()입니다 하지 PHP에서 문자열이 있기 때문에, 여기에 올바른 '0'에 해당 false하고 - empty()반환 true을위한 false로 모든 값을 해당 . 따라서를 사용 empty하면 값이이면 코드가 인쇄를 건너 뜁니다 '0'.
ToolmakerSteve

30

놀랍게도 언급되지 않았습니다.

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

2
왜? 서버 방법이 POST가 아니면 POST 변수가 설정되지 않으므로 나머지 절반 만 있으면됩니다. 내가 잘못?
ToolmakerSteve 2015

@ToolmakerSteve 예 대부분의 경우 충분하지만 항상 그런 것은 아닙니다. 내 대답은 다른 방법을 보여주는 것이 었습니다.
John Magnolia

확인란이있는 양식이 있고 이름없이 제출하는 경우에도 작동합니다.
John Magnolia

2
상황 설명 isset($_POST['fromPerson']입니다 true, 비록 if($_SERVER['REQUEST_METHOD'] == 'POST'입니다 false. 그런 상황이 아니라면 필요한 것은 isset...부분뿐입니다.
ToolmakerSteve

사실이지만 그 반대입니다. fromPerson존재하지 않을 수 있지만 POST는 여전히 존재할 수 있습니다. 질문은 "$ _POST가 존재하는 경우"였습니다. 예제에서만 $ _POST [ 'fromPerson']이 사용됩니다. 일부 상황에서는 @goat가 여기 에서 설명fromPerson 하는 것처럼 제출 이름 이더라도 POST에 없을 수 있습니다.
papo


13

배열 키가 있는지 확인하는 올바른 방법은 기능입니다. array_key_exists()

차이점은 $_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

귀하의 질문에 대해

값이 전송되었는지 확인하는 올바른 방법은 요청 메소드 확인과 함께 array_key_exists ()를 사용하는 것입니다.

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

그러나 어떤 경우에는 당신의 논리에 따라 달라집니다 곳이 있습니다 isset()empty()잘 될뿐만 아니라 수 있습니다.


사용 제안을 제외하고 환상적인 대답 empty. 시의 의견에 따라 아우구스투스 프란시스의 대답에 , empty()입니다 하지 PHP에서 문자열이 있기 때문에, 대안 선택 등 올바른 '0'에 해당 false하고 - empty()반환 true을위한 false로 모든 값을 해당 . 따라서를 사용 empty하면 값이이면 코드가 인쇄를 건너 뜁니다 '0'. 빈 문자열을 제외하려면 Augustus 답변을 참조하십시오.
ToolmakerSteve

우수 답변 +1.
Viktor Joras

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();


  • 4.1.0 버전부터 PHP 환경 전역 변수이기 때문에 $ _POST 배열의 존재 여부를 확인할 필요가 없습니다 (현재는 이전 버전의 PHP를 지원하지 않습니다).

이 코드 isset는 post 필드가 설정되었지만 NULL을 포함하는 경우 에만 솔루션 과 동작이 다릅니다 . 이것은이다 좋은 대안 , 경우에 허용 할 NULLelse지점입니다. 그러나 문자열이 필요하면 실수입니다. 이 상황 isset에서 옳은 일을하지만이 코드는 그렇지 않습니다 NULL. 값을 전달합니다 . Robert의 이후 답변 은 차이점을 보여줍니다.
ToolmakerSteve

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

1
한편 코드의 가독성도 중요합니다. IMHO isset는 필터 표현식보다 훨씬 더 읽기 쉽습니다 . 그러나 이것을 지적 해주셔서 감사합니다. 고려해야 할 유용한 옵션입니다.
ToolmakerSteve 2015

글쎄, 당신은 필터를 사용하지만 isset / 2의 동작을 갖는 myIsset / 2 래퍼 metod를 작성할 수 있습니다.
linuxatico

"모든 메소드는 실제로 권장되지 않습니다"-이는 강력한 진술입니다 (NetBeans가 경고로 표시하더라도). 당신은에 대한 링크가 있습니까 권위있는 소스를 , 그 스타일을 장려 $ _POST에 직접 참조? ( 엄격하기보다는 코딩 편의를 위해 설계된 PHP에 대해 많이 있습니다. 이 질문에 대한 답변에서 얼마나 많은 사람들이 emptyphp의 느슨한 타이핑으로 인해 잘못 사용되었는지 살펴보십시오 . $ _ POST에 액세스하는 것이 좋지 않다고 생각하기는 어렵습니다. 스타일).
ToolmakerSteve

4

시험

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

Rafael의 답변에 대한 Han Dijk의 의견 empty($_POST['fromPerson'])은이 결합 테스트를 수행합니다. 읽기 및 입력이 더
쉬움

@ToolmakerSteve : empty('0')리턴 true. 그래서 그것은 동일하지 않습니다.
Shi

1
@Shi-네, 맞습니다. 내가 말한 것이 잘못되었습니다! 여기에 표시된 코드보다 더 간단한 해결책은없는 것 같습니다.
ToolmakerSteve


3
if (is_array($_POST) && array_key_exists('fromPerson', $_POST)) {
    echo 'blah' . $_POST['fromPerson'];
}

1
is_array ($ _ POST)는 POST에 값이 있는지 확인합니까? 내 앱에서 다른 작업을 수행하기 전에 게시물이 있는지 여부를 확인하려고합니다.
Jeff LaFay

1
내 편집을 참조하십시오. is_array()배열인지 확인하고 두 번째 부분은 키가있는 항목이 있는지 확인합니다 'fromPerson'.
jezmck

2

if( isset($_POST['fromPerson']) ) 맞다.

함수를 사용하고 반환하면 에코를 지시하는 것이 좋습니다.


2
이 답변은 몇 년 전에 다른 답변에서 아직 언급되지 않은 토론에 아무것도 추가하지 않습니다 .
ToolmakerSteve

1

나는 그것이 설정되어 있는지 그리고 삼항 연산자에서 비어 있는지 확인하고 싶습니다.

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

5
empty('0')입니다 true. 그래서 더하지 version 0, 또는 userID 0등,

0

이 스레드가 오래되어 Google에서 높은 순위를 차지했지만 내 대답을 추가하고 싶습니다.

내 가장 좋은 방법은 다음을 시도하는 것입니다.

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

$_POST배열과 마찬가지로 스크립트가로드되고 데이터가$_POST 변수 경우 배열 길이는 0입니다. 이는 IF 문에서 사용할 수 있습니다.

$_POST이 설정되어 있는지 확인하는 것처럼 "정의되지 않은 인덱스"오류가 발생하는지 궁금 할 수도 있습니다 . 실제로 $_POST항상 존재합니다. "정의되지 않은 인덱스"오류는 $ _POST를 검색하려고 할 때만 나타납니다. 존재하지 않는 배열 값.

$_POST항상 자체적으로 비어 있거나 배열 값이 있습니다. $_POST['value']존재하지 않을 수 있으므로 "정의되지 않은 색인"오류가 발생합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.