我有一个PHP日历,可以根据月份和年份生成日历。我使用$ _GET [“year”]。因此,它出现在页面的URL中。因此,用户可以输入任何一年。如何验证他们输入的年份是一年(如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");
}
但是我不能用年份来做这件事(因为这一年可能是任何数字)。 另外,还有更好的方法来验证除上述之外的月份吗?
感谢。
答案 0 :(得分:5)
尝试http://php.net/manual/en/function.checkdate.php
if (checkdate($_GET['month'], 1, $_GET['year'])) ... okay
答案 1 :(得分:3)
除了必须是正整数之外,你对年份有什么限制?
关于您的月份验证(也可能是您的第一年),您应该检查数字范围,例如
$m = ctype_digit($_GET['month']) ? (int) $_GET['month'] : 0;
if ($m >= 1 && $m <= 12) {
// month is valid
}
答案 2 :(得分:2)
是的,您可以像这样验证月份:
$month = intval($_GET['month']);
if ($month >= 1 && $month <= 12) {
// ...
}
你甚至不需要核实这一年;只需使用intval()
答案 3 :(得分: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)))
答案 4 :(得分:0)
我会做类似的事情:
$m = intval($_GET['month']);
$y = intval($_GET['year']);
if($m < 1 || $m > 12 || $y < 1900 || $y > 2100) echo "bad input!";
答案 5 :(得分:0)
2件事。
1st:你可以在php中使用pasre_url()方法来确保没有无效的格式。
第二:匹配一年/月(因为一年必须是4位数字),可以使用正则表达式轻松验证它们。因为我不喜欢信息来源我学到了什么......看看这里验证日期。
http://www.regular-expressions.info/dates.html
如果你需要,我可以为你写.php,但从现在开始应该很容易。
答案 6 :(得分: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"); }
?>