php if-statement:0> 2012?

时间:2012-02-21 07:58:45

标签: php if-statement int

也许是一个非常简单的问题,但是我不知道我做错了什么,也许有人可以帮助我?

有一个包含年份的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! :)

2 个答案:

答案 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) ...