2013-08-02 12 views
4

POST 또는 GET 여부에 관계없이 변수를 가져올 수 있는지 그리고 filter_input()을 사용하여 변수를 살균 할 수 있는지 궁금합니다.filter_input을 사용하면서 POST 및 GET 데이터를 확인하는 방법은 무엇입니까?

처음에는 $var = filter_input(INPUT_POST | INPUT_GET, "var", FILTER_SANITIZE_STRING)이 작동한다고 생각했지만 PHP 매뉴얼에서는 입력 유형 하나만 전달할 수 있다고 말합니다.

나는 또한 이상하게 작동하지 않았다 INPUT_REQUEST을 시도했다. 이 함수는 그것을 인식합니다 (즉, $ input에 잘못 입력했다고 말하는 오류를 던지지 않음). 그러나 코드를 얻지는 못합니다. 그리고 예, 라이브 환경에서 INPUT_REQUEST을 사용하지 않기로 알고 있습니다. 작동 여부를 테스트했습니다.

현재 나는 다음을 수행하십시오

$var = filter_input(INPUT_POST, "var", FILTER_SANITIZE_STRING); 
if(!$var) $var = filter_input(INPUT_GET, "var", FILTER_SANITIZE_STRING); 

그러나 PHP에서 여러 가지로, 하나의 명령에 나를 위해 모든 것을 할 것입니다 종종 간단한 방법이있다. 나는 그것이 그 경우 여기에 있는지 궁금해하고 있는데, 그것들을 하나의 수표에 결합 할 수 있습니까? Google에서 간단한 검색을 수행 했으므로 이전에 시도한 사람에게도 참조 할 수 없었습니다. 해결책은 없었으므로 지금 나는 좋은 사람들을 생각해 보았습니다.

+0

어떤 목적으로 문자열을 "살균"하고 싶습니까? –

+0

GET 변수에 악성 코드가 입력되지 않았는지 또는 POST의 경우 사용자가 양식을 변조하지 않았을 가능성이 높습니다 (숨겨진 변수 일 가능성이 높습니다). – Styphon

+0

http://php.net/manual/en/function.filter-input.php - 첫 번째 매개 변수는 상수 중 하나이며 배열이 아니며 || 절. 한 줄로 처리하려면 배열, foreach를 받아들이고 모든 요소를 ​​첫 번째 매개 변수로 설정하는 사용자 함수를 만들어야합니다.그러나, 당신이 정말로 당신의 의견이 무엇인지 알지 못하기 때문에 그것은 나쁜 습관으로 보입니다. –

답변

3

입력이 GET 또는 POST인지 여부를 알 수없는 경우 나쁜 습관으로 간주됩니다. 당신은 항상 알고 있고, 무작위로 무엇이든 받아들이면 안됩니다.

+0

대부분 동의하고 대부분 일반적으로 사용합니다. 한쪽 또는 다른 쪽. 상황에 따라 양식에서 페이지에 데이터를 게시하는 경우도 있지만 변수를 사용하여 링크를 저장할 수있는 것처럼 POST 및 GET 유형을 모두 사용하는 것이 더 쉽습니다. – Styphon

+0

그래서 당신은 "내 유스 케이스가 나쁘다는 것을 안다.하지만 나는 여전히 지원 받기를 원할 것이다"라고 말하고있다. – Halcyon

+5

전혀 아니지만 대부분의 경우와 마찬가지로 규칙에 대한 예외가 있지만 대부분의 경우 나쁜 관행이라고 주장합니다. – Styphon

0

POST을 내 양식에서 GET으로 변경할 수 있습니다. GET을 수락해야합니다. 올바른 방법인지 이해하지 못했습니다.

function getPostOrGet($name) { 

    $var = filter_input(INPUT_POST, $name, FILTER_SANITIZE_STRING); 

    if(!$var) $var = filter_input(INPUT_GET, $name, FILTER_SANITIZE_STRING); 

    return $var; 

} 

그리고 당신이 생각하는 경우 다음 때문에 | 운영자를 사용할 수 없습니다 정상입니다 : 내가 이미 언급 한 코드로 사용자 정의 함수를 만드는 것보다 더 좋은 방법이 아니라고 생각

1

그것이 둘 다에 정의되어 있다면 어떤 일이 일어 났는가.

나쁜 실행이므로 "쉬운"방법이 없습니다. 가능한 경우 사용자 정의 함수를 사용하고 가능한 경우 올바른 입력 유형 만 사용하십시오. 당신 제대로 입력을 소독하는 경우 if(!$var) 조건이 0 같은 falsy하지만 기존 값에 의해 트리거 될 수 있기 때문에

0

, 나는 개인적으로, null에 대한 filtre_input의 결과를 테스트하는 것입니다. 예를 들어

:

function getLatitude($name) { 
    $var = filter_input(INPUT_POST, 'latitude', FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION); 
    if($var === null){ 
     $var = filter_input(INPUT_GET, 'latitude', FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION); 
    } 
    return $var; 
} 
보통 !$var 조건

FILTER_SANITIZE_NUMBER_FLOAT, 당신은 대신 0null 값을 얻을 것이다.