开发者

How can I verify a year in $_GET["year"] in PHP?

I have a PHP calendar that generates a calendar based on the month and year. I use $_GET["year"]. So, it appears in the URL of the page. Therefore, the user can input any year. How can I verify that the year they entered is a year (like 2010) and not a random input (like 2t8e7sjj2)?

I figured out how to verify month like this:

$m = $_GET["mo开发者_如何学运维nth"];

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");
}

But I can't do this with year (since the year could be any number). Also, is there a better way to verify the month other than above?

Thanks.


try http://php.net/manual/en/function.checkdate.php

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


What are your restrictions on year other than it must be a positive integer number?

Regarding your month validation (and most probably your year one as well), you should be checking against a numeric range, eg

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


Yes, you can verify the month like this:

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

You don't even need to verify the year; just clean it with intval()

http://php.net/intval


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

also

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


I'd do something like:

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


2 things.

1st: you can use the pasre_url() method in php to ensure that there is no invalid formatting.

2nd: to match a year/month (since a year must be 4 numeric digits) they can be verified easily using regular expressions. Since I don't like to take credit for the sources I learned something ... look here to validate dates.

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

If you need I can write the .php for you, but it should be pretty easy from this point.


You can use this to check both ( month , year )

<?

// 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"); }

?>
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜