也许是一个非常简单的问题,但是我不知道我做错了什么,也许有人可以帮助我?
有一个包含年份的GET变量,我想检查它是否实际上是一种有效格式,也不是过去,即当前年份或更晚。我到现在所做的是:
$current_year=date('Y',$today);
(is_int(intval($_GET['year'])) AND $_GET['year']>$current_year) ? $year=$_GET['year'] : $year=$current_year;
如果GET-var不是一个整数,那么函数intval()将返回0或1,如php.net手册中所述。字符串“abc”。
但是,如果$ _GET ['year']包含“abc”,然后将其转换为0并且不应该是> 2012年,$ year不是2012年!?
任何提示都将受到高度赞赏,并提前感谢您!
编辑:
感谢您的所有好消息!我试着考虑所有这些,现在这对我很有用:
if (ctype_digit($_GET['year'])) { ($_GET['year'] > $current_year && $_GET['year']<=($current_year+2)) ? $year=$_GET['year'] : $year=$current_year;} else {$year=$current_year;}
因为我将来只需要接下来的2年,所以我添加了这个...谢谢你提示检查它是否只有4位数,deceze! :)
答案 0 :(得分:1)
intval()
不会更改传递给它的变量的类型。所以你真正做的是将'abc'与'2012'进行比较,因为date()
会返回一个字符串。
答案 1 :(得分:1)
intval
会将任何变成int
,即使只是0
,这意味着is_int
因此总是true
}。 is_int(intval())
因此毫无意义。 $_GET
值始终为字符串,即使它们只包含数字。因此,您可能希望使用ctype_digit
进行检查,它会告诉您字符串中的所有字符是否都是数字。所以你的支票应该是这样的:
if (ctype_digit($_GET['year']) && $_GET['year'] > $current_year) ...