2010-12-15 3 views
0

나는 달과 년을 기준으로 달력을 생성하는 PHP 달력이 있습니다. 나는 $ _GET [ "year"]를 사용합니다. 따라서 페이지의 URL에 나타납니다. 따라서, 사용자는 임의의 연도를 입력 할 수있다. 입력 한 연도가 1 년 (2010과 같은)이고 무작위 입력 (2t8e7sjj2와 같은)이 아닌지 어떻게 확인할 수 있습니까?

$m = $_GET["month"]; 

if($m!=1 && $m!=2 && $m!=3 && $m!=4 && $m!=5 && $m!=6 && $m!=7 && $m!=8 && $m!=9 && $m!=10 && $m!=11 && $m!=12) 
{ 
$m = date("m"); 
} 

을하지만 (올해는 모든 숫자가 될 수 있기 때문에) 나는 올해이 작업을 수행 할 수 없습니다

나는 달과 같이 확인하는 방법을 알아 냈어. 또한 위와 다른 달을 확인할 수있는 더 좋은 방법이 있습니까?

감사합니다.

+6

이것은 당신이 "해"를 정의하는 방법 나 – fredley

+0

울고 싶 모두 (월, 년)을 확인하는 데 사용할 수있는? 항상 4 자리 숫자 또는 2 자리 숫자가 가능합니까? 특정 범위 (1900-2100)를 중요하게 생각합니까? – KingCrunch

+4

파이로 쉽게! 'if ($ year! = 1981 && $ year! = 1982 && ...) '- 1981이 존재의 시작이었습니다 (나를 위해). –

답변

5

당신의 달 검증 (뿐만 아니라 대부분의 아마 한 해 한), 당신은 숫자 범위에 대해 확인해야한다, 예, 당신은 확인할 수 http://php.net/manual/en/function.checkdate.php

if (checkdate($_GET['month'], 1, $_GET['year'])) ... okay 
+0

Perfect. 생각할 때 - 나는 OP가 필요하지 않을 때 왕복 오류 메시지를 피하기 위해 클라이언트 측의 유효성을 검사하기를 권유합니다. – iivel

+0

'checkdate'는 인수를 정수로 변환합니다. 댄의 대답은 – Phil

1
if (is_numeric($_GET['year']) && in_array($_GET['year'], range(1900,2100))) 

또한

if (is_numeric($_GET['month']) && in_array($_GET['month'], range(1,12))) 
+1

'2100'과 비교하는 대신'date ('Y') + 100'과 비교하는 것이 더 나을 수도 있습니다. 그렇지 않으면 프로그램이 결국 구형이됩니다.비록 아마 100 년 동안 사용되지 않을지라도 ... – Jonah

3

년에 대한 당신의 제한은 양의 정수 여야합니다 이외의 무엇입니까? 예를 들어

$m = ctype_digit($_GET['month']) ? (int) $_GET['month'] : 0; 
if ($m >= 1 && $m <= 12) { 
    // month is valid 
} 
+2

이것은 다른 것들 사이에 숫자가 포함 된 경우에 횡설수설을 숫자에 던지게 할 수 있습니다. '2t8e7sjj2'는 2로 변환되지 않고 단순히 무효해야합니다. –

+0

@Dan Good call. 이것은'intval' 응답에도 적용됩니다. 답변 됨 편집 됨 – Phil

2

시도에 대해서는

이 달은 다음과 같습니다.

$month = intval($_GET['month']); 
if ($month >= 1 && $month <= 12) { 
    // ... 
} 

올해를 확인할 필요조차 없습니다. 단지 내가 좋아하는 일을 할 것 intval()

http://php.net/intval

+1

음, 내 대답은 13 이하입니까? 당신은 도약의 달이 있습니까? – fredley

+0

죄송합니다.'<':) 그걸 알아 줘서 고마워. – Jonah

+0

Lousy Smarch weather! – Phil

0

로 청소 :

$m = intval($_GET['month']); 
$y = intval($_GET['year']); 
if($m < 1 || $m > 12 || $y < 1900 || $y > 2100) echo "bad input!"; 
0

2 가지.

1 번째 : PHP에서 pasre_url() 메소드를 사용하여 잘못된 형식이 없는지 확인할 수 있습니다.

두 번째 : 년/월 (연도가 4 자리 숫자 여야 함)과 일치하려면 정규식을 사용하여 쉽게 확인할 수 있습니다. 나는 근원에 대한 공로를 인정 받기를 좋아하지 않기 때문에 나는 뭔가를 배웠다 ... 날짜를 확인하기 위해 여기를 보아라.

http://www.regular-expressions.info/dates.html

당신은 내가 당신을 위해 .PHP을 쓸 수 있지만,이 시점에서 꽤 쉽게해야합니다 필요합니다.

0

이이

<? 

// define vars 
$months = array(); 
$years = array(); 

// create new array with months values 
for($i=1;$i<=12;$i++) 
    array_push($months,$i); 

// create new array with years values ex: begin with year 1930 to 2011 
for($i=1930;$i<=2011;$i++) 
    array_push($years,$i); 

// Check Values 
if(in_array($_GET['m'],$months)) 
{ $m = $_GET['m']; } 
else 
{ $m = date("m"); } 

if(in_array($_GET['y'],$years)) 
{ $y = $_GET['y']; } 
else 
{ $y = date("Y"); } 

?> 
관련 문제