2012-01-19 2 views
2

나는 많은 사람들의 코드를 요즘 사용하고있다. 일부 코드에서는 if (isset($_POST))을 발견하고이를 수정했습니다. 항상 true으로 평가됩니다. 그럼 나는 이것을보기 시작합니다 :

if ($_POST) 

이것을 통해 생각한 후에, 그것은 나를 귀찮게하지만 여전히 작동하는 것 같습니다. 이 양식을 제출했는지 확인하는 데 문제가있는 사람이 있습니까? $_POST 어레이가 비어 있으면 false으로 평가됩니다. 이것이 작동하지 않을 수있는 특별한 경우?

+2

왜 POST 배열을 확인합니까? POST 변수가 올바른지 검사 할 것입니까? '$ _POST [ "data1"]' –

+1

각각의'POST' 변수의 유효성을 검사하는 것이 더 나을지 모르겠지만 그것을 사용하는 좋은 이유는 사용자가 폼 처리 페이지로 수동으로 이동하는 경우입니다.이 경우에는'POST' 배열 비어있을 것이며 그에 따라 상황을 처리 할 수 ​​있습니다. 나는 약간의 코드가 실패 할 상황이 있다고 생각하지 않는다. 나는 최선의 방법은 그것을 사용하는 것이라고 생각하고 각 변수를 개별적으로'if' 내부에서 검사하는 것입니다. – martincarlin87

+0

나는 항상 특정 값을 확인한다. 나는 다른 사람들 코드에서 발견 된 if ($ _POST) 인스턴스를 수백 개 이상 수정해야하는지 궁금 할뿐입니다. – teynon

답변

6

신뢰할 수없는 테스트입니다. 적어도 하나의 양식 요소가 제출 될 것으로 가정합니다. if ($_POST)을 false로 평가하는 데이터가 제출되지 않은 POST를 수행하는 것은 전적으로 가능하지만 POST가 실제로 수행 될 때 meta-false가됩니다.

if(count($_POST) > 0) 
{ # Array not empty 
} 

: 배열이 count() 또는 sizeof()를 사용하고 0보다 큰 경우 확인해야 비어있는 경우

적절한 100 % 신뢰할 수있는 검사는

if ($_SERVER['REQUEST_METHOD'] == 'POST') { ... } 
1

은 (어쨌든, 생각할 수없는 것을) 않는다는 경우가 없어야하지만, 난 여전히 할 것 :

if (!empty($_POST)) { 

은 당신이하고 정확하게 무엇을 명확하게 할 수 있습니다. 이것은 사실 동일한 진술이지만 더 분명하게 보여줍니다.

+0

비어 있음 올바르지 않습니다. array (0) 인 경우에도 비어 있습니다. ['count'] (http://php.net/count)를 사용하여 크기를 확인하십시오. –

+0

@WouterJ'배열 (0)이면 빈 상태입니다. '- 사실이 아닙니다. 이것을 시도해보십시오'$ arr = array (0); var_dump (empty ($ arr));' – DaveRandom

+0

@DaveRandom, 이것을보십시오 : if (empty (array (0))) echo "나는 비어 있습니다."; – HappyTimeGopher

0
[[email protected]/var/www]telnet localhost 80 
Trying 127.0.0.1... 
Connected to localhost. 
Escape character is '^]'. 
GET /test.php HTTP/1.0 
Host: localhost 

HTTP/1.0 200 OK 
X-Powered-By: PHP/5.3.6-13ubuntu3.3 
Content-type: text/html 
Content-Length: 13 
Connection: close 

array(0) { 
} 

GET 요청에도 문제가없는 것으로 보입니다. 그러나 !empty($_POST) 또는 이와 유사한 것을 사용하는 것이 훨씬 더 읽기 쉽습니다.

0

프로그래머가 POSTed를 기대하지 않은 형식이 매우 위험한 테스트가되는 경우. 내 패턴은 내가 기대하는 각 필드를 테스트하는 것입니다 :

if (isset($_POST['foo_id']) && is_numeric($_POST['foo_id']) 
    && isset($_POST['name']) 
    && isset($_POST['value']) 
) { 

이렇게하면 잘못된 양식을 처리 할 가능성이 없습니다.

3

확인하는 것입니다 양식을 제출했는지 확인하는 더 좋은 방법은 게시 된 바를 보냈는지 확인하는 것입니다.

if($_SERVER['REQUEST_METHOD'] === 'POST') 
{ # Form submitted 
} 
1

PHP 4.1 이전에는 $ _POST가 없었습니다. 그 대신 $ HTTP_POST_VARS라는 변수가 있었는데, 그것은 슈퍼 글로벌이 아니라는 점을 제외하고는 똑같이했습니다. $ HTTP_POST_VARS는 더 이상 사용되지 않으므로 걱정할 필요가 없습니다. $ _POST에 대한 검사는 php < 4.1 설치를 실행하면 실제로 false를 반환 할 수 있으므로 코드가이를 확인했을 수 있습니다.

if ($_POST)

은 한 가지 중요한 차이점을 제외하고 if (!empty($_POST)) 동일 동작 : $ _POST이 설정되지 않은 경우 첫 번째 버전은 빈(), 통지서가 발생합니다 - 코스 error_output가 통지를 에코로 설정해야합니다의 버전 (통지를 포기하지 않습니다 당신이 뭔가를 볼 수 있도록). 검사중인 변수가 설정되지 않은 경우 항상 비어 있어야합니다.

나는 if ($_POST)보다 나쁜 냄새가 난다고 말하고 싶습니다. 이미 원래 코더의 의도가 불분명하다는 것을 이미 알고 있습니다.HTTP 요청에서 POST 방법을 사용했음을 알고 싶다면 Wouter의 대답을 통해 훨씬 더 명확한 의도를 알 수 있습니다. $ _POST가 있는지 (이전 PHP 버전을 확인하십시오) 확인하고 싶다면 isset($_POST)이 더 뚜렷합니다. POST 요청에 적어도 하나의 매개 변수가 POST를 사용하여 전송되는지 확인하려면 empty($_POST)이 훨씬 명확하고 그러한 의도는 극히 드물어야합니다.

원본을 계속 읽고 원본 의도에 대한 의도를 파악한 다음 그에 따라 구문을 바꾸거나 적어도 해당 행에 주석을 달아주십시오.

+0

그것은 선사 시대의 코드로 일하고 있기 때문에, 조금 더 의미가 있습니다. – teynon