2011-01-08 5 views
0
is_int($_GET['pid']) ? define(PRODUCT, $_GET['pid']) : die('Invalid Product Id'); 

pid 값이 정수 인 경우에도 여전히 잘못된 제품 ID 메시지가 표시됩니다. 왜?이 간단한 PHP 라인의 문제점은 무엇입니까?

+0

다음 예에서 볼 수 있습니다. var_dump (is_int ("23"));'bool (false)'를 출력합니다. 실제로 질문에 대한 답변 : 코드에 잘못된 것이 없습니다. 유일한 방법은이 방법으로 삼항 연산자를 사용하면 안된다는 것입니다. 실제로 값을 지정하는 경우에만 사용해야합니다 (다시 : imo). –

+4

답이 아니라 단지 조언 : 제어 흐름 (하나의 명령문 또는 다른 명령문 실행)에 대해 3 진 연산자'? :'를 사용하지 마십시오. 예를 들어'x = (y> 5? 'high': 'low')'와 같이 표현식으로 사용하기위한 것입니다. 이 경우'if (...) {...} else {...}'를 사용하십시오. –

답변

4

마찬가지로 manual과 같습니다 : 변수가 숫자 또는 숫자 문자열 (양식 입력, 항상 문자열)인지 테스트하려면 is_numeric()을 사용해야합니다.

편집 : 내 대답은 여기에 암시되어 있지만 더 구체적 일 것입니다. $_GET의 내용이 문자열이므로 is_int 호출은 항상 false를 반환합니다. 여기에서 실제로 확인하려는 내용은 특정 문자열의 내용이 정수 숫자를 나타내는 경우 is_numeric으로 전화를 걸 수 있습니다.

+2

"... 특정 문자열의 내용이 정수를 나타내는 지 확인하려면 is_numeric에 대한 호출을 사용할 수 있습니다." 아닙니다. _is_numeric() _을 통해서만 정수라는 것을 확인할 수 있습니다. 정수가 아닙니다. 크리스의 대답을보십시오. – GZipp

1

$_GET[]은 항상 문자열을 반환하므로 is_int()은 항상 false으로 평가됩니다. 대신 is_numeric()을 시도하십시오.

+0

8 초 빨라지고 내 (동일한) 답변을 삭제합니다 ;-) – ChristopheD

1

$_GET의 문자열은 모두 문자열이며 is_int("2")false을 반환합니다.

2

$ _GET 배열의 값은 대개 유형 문자열이지만, 때로는 배열을 입력하는 경우도 있습니다.

ctype_digit()을 사용하여 문자열이 완전히 숫자인지 확인합니다. 선택적으로 문자열을 먼저 trim()합니다. 십진수, 과학적 표기법, 16 진수 문자열 등과 같이 숫자로 해석되는 다양한 형식의 문자열을 허용하려는 경우에만 is_numeric()을 사용하십시오.

관련 문제