답변:
//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;
}
if (isset($_POST['fromPerson']) )
{
$fromPerson = '+from%3A'.$_POST['fromPerson'];
echo $fromPerson;
}
모두가 isset ()을 사용하라고 말하고 있습니다-아마도 당신에게 도움이 될 것입니다.
그러나 다음의 차이점을 이해하는 것이 중요합니다.
$_POST['x'] = NULL;
과 $_POST['x'] = '';
isset($_POST['x'])
반환 false
첫 번째 예제에서,하지만 돌아갑니다 true
당신은 둘 중 하나를 인쇄하려고하면, 모두가 빈 값을 반환에도 불구하고 두 번째에.
당신이 경우 $_POST
비워을 사용자가 입력 필드 / 양식에서오고입니다, 나는 NULL을 "(나는이 생각에 100 % 확신하지 않다) 값이 될 것이라고 믿는다"하지만.
그 가정이 틀린 경우에도 (내가 틀렸다면 누군가 나를 고쳐주세요!) 위의 내용은 향후 사용을 위해 알아두면 좋습니다.
empty()
입니다 하지 PHP에서 문자열이 있기 때문에, 여기에 올바른 '0'
에 해당 false
하고 - empty()
반환 true
을위한 false로 모든 값을 해당 . 따라서를 사용 empty
하면 값이이면 코드가 인쇄를 건너 뜁니다 '0'
.
놀랍게도 언급되지 않았습니다.
if($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['fromPerson'])){
isset($_POST['fromPerson']
입니다 true
, 비록 if($_SERVER['REQUEST_METHOD'] == 'POST'
입니다 false
. 그런 상황이 아니라면 필요한 것은 isset...
부분뿐입니다.
배열 키가 있는지 확인하는 올바른 방법은 기능입니다. 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 답변을 참조하십시오.
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();
isset
는 post 필드가 설정되었지만 NULL을 포함하는 경우 에만 솔루션 과 동작이 다릅니다 . 이것은이다 좋은 대안 , 경우에 허용 할 NULL
에 else
지점입니다. 그러나 문자열이 필요하면 실수입니다. 이 상황 isset
에서 옳은 일을하지만이 코드는 그렇지 않습니다 NULL
. 값을 전달합니다 . Robert의 이후 답변 은 차이점을 보여줍니다.
모든 방법은 실제로 권장되지 않습니다. 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);
isset
는 필터 표현식보다 훨씬 더 읽기 쉽습니다 . 그러나 이것을 지적 해주셔서 감사합니다. 고려해야 할 유용한 옵션입니다.
empty
php의 느슨한 타이핑으로 인해 잘못 사용되었는지 살펴보십시오 . $ _ POST에 액세스하는 것이 좋지 않다고 생각하기는 어렵습니다. 스타일).
시험
if (isset($_POST['fromPerson']) && $_POST['fromPerson'] != "") {
echo "Cool";
}
empty($_POST['fromPerson'])
은이 결합 테스트를 수행합니다. 읽기 및 입력이 더
empty('0')
리턴 true
. 그래서 그것은 동일하지 않습니다.
if (is_array($_POST) && array_key_exists('fromPerson', $_POST)) {
echo 'blah' . $_POST['fromPerson'];
}
is_array()
배열인지 확인하고 두 번째 부분은 키가있는 항목이 있는지 확인합니다 'fromPerson'
.
if( isset($_POST['fromPerson']) )
맞다.
함수를 사용하고 반환하면 에코를 지시하는 것이 좋습니다.
나는 그것이 설정되어 있는지 그리고 삼항 연산자에서 비어 있는지 확인하고 싶습니다.
// 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;
empty('0')
입니다 true
. 그래서 더하지 version
0
, 또는 userID
0
등,
이 스레드가 오래되어 Google에서 높은 순위를 차지했지만 내 대답을 추가하고 싶습니다.
내 가장 좋은 방법은 다음을 시도하는 것입니다.
if(sizeof($_POST) !== 0){
// Code...
}
$_POST
배열과 마찬가지로 스크립트가로드되고 데이터가$_POST
변수 경우 배열 길이는 0입니다. 이는 IF 문에서 사용할 수 있습니다.
$_POST
이 설정되어 있는지 확인하는 것처럼 "정의되지 않은 인덱스"오류가 발생하는지 궁금 할 수도 있습니다 . 실제로 $_POST
항상 존재합니다. "정의되지 않은 인덱스"오류는 $ _POST를 검색하려고 할 때만 나타납니다. 존재하지 않는 배열 값.
$_POST
항상 자체적으로 비어 있거나 배열 값이 있습니다.
$_POST['value']
존재하지 않을 수 있으므로 "정의되지 않은 색인"오류가 발생합니다.
empty()
입니다 하지 PHP에서 문자열이 있기 때문에, 선택 # 1에 대한 올바른'0'
에 해당false
하고 -empty()
반환true
을위한 false로 모든 값을 해당 . 따라서를 사용empty
하면 값이이면 코드가 인쇄를 건너 뜁니다'0'
. 빈 문자열을 제외하려면 Augustus 답변을 참조하십시오.