php if-statement:0> 2012?

问题描述:

也许是一个非常简单的问题,但我不知道我做错了什么,也许有人可以帮助我?php if-statement:0> 2012?

有一个包含年份的GET变量,我想检查它是否实际上是有效格式,也不在过去,即当前年份或更晚版本。我所做的到现在是:

$current_year=date('Y',$today); 

(is_int(intval($_GET['year'])) AND $_GET['year']>$current_year) ? $year=$_GET['year'] : $year=$current_year;

函数intval()返回,因为它应该为0或1的php.net手册的规定,如果GET-VAR是不是整数,例如字符串“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位数,那么! :)

intval将裂伤什么int,哪怕只是为0,这意味着is_int是因此总是trueis_int(intval())因此毫无意义。 $_GET值始终是字符串,即使它们只包含数字。因此,您可能需要使用ctype_digit进行检查,它会告诉您字符串中的所有字符是否为数字。所以你的支票应该是这样的:

if (ctype_digit($_GET['year']) && $_GET['year'] > $current_year) ... 
+0

是不是必须使用ctype_digit($ _GET ['year'])> $ current_year – 2012-02-21 08:09:59

+0

非常感谢你! @Sheikh Heera:为什么没有必要? – Chris 2012-02-21 08:12:04

+0

@Sheikh号''ctype_digit'返回'true'或'false'。我们只是检查值是否是数值,如果是,是否大于当年。 – deceze 2012-02-21 08:13:15

intval()不会更改传递给它的变量的类型。所以你真的做比较'abc'到'2012',因为date()返回一个字符串。

+0

啊,我明白你的意思了!非常真实......非常感谢你! – Chris 2012-02-21 08:13:29