2012-05-31 4 views
1

$ _POST를 통해 전송 된 모든 데이터가 문자열이라고 생각합니다. 따라서 사용자가 정수를 입력하기를 원한다면 (예를 들어, 사용자에게 하나의 상자에서 몇 시간, 다른 상자에서 몇 분을 묻는 것입니다. 2.5 시간 22 분이라고 말하면 이해할 수 없습니다), 어떻게 할 수 있습니까? 나는 그것을 확인합니까? 양식 텍스트를 정수로 검증 하시겠습니까?

if(!filter_input(INPUT_POST, 'hours', FILTER_VALIDATE_INT)) {} 

가이 일을 다른/더 나은 방법이 있습니다

이미이있는 솔루션을해야합니까?

$ _POST 데이터가 문자열이므로 is_numeric/is_int가 실패합니다. 값을 캐스팅하면 데이터가 손실되거나 자체 문제가 발생할 수 있습니다.

답변

0

입력이 유효한 정수인지 확인하는 좋은 방법입니다.

$_POST에 채워지는 모든 값이 문자열이어야한다는 것이 맞습니다.

0

PHP로 보내기 전에 (Javascript/Jquery/another library를 통해) 클라이언트 측을 검증합니다. PHP의 is_numeric은 스트링 변수가 .. 음, 숫자가 맞는지 테스트하는 것으로되어 있습니다! 이것은 주로 캐스팅하지 않고 숫자 값에 대해 $_POST/$_GET 변수를 테스트하는 표준 방법입니다.

모든 변수는 문자열이며 명시 적으로 INT에 필요한 문자열을 캐스팅하지 않고 좋은 해결책이라고 생각합니다.

0

유효성 검사 라이브러리를 사용해야합니다. Respect\Validation를 사용하는 샘플 :

<?php 

use Respect\Validation\Validator as v; 

$isFormValid = v::key('hours', v::int()->between(0,23)) 
       ->key('minutes', v::int()->between(0,59)) 
       ->validate($_POST); 

$isFormValid 변수는 결과에 따라 true 또는 false있을 것입니다.

is_numeric($input) && (int) $input == $input; 
:

당신이 스스로를하고 싶은 경우는 int validator from Respect이 논리를 사용

관련 문제