繁体   English   中英

php if语句: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;

如果GET-var不是整数,例如字符串“ abc”,则intval()函数应按php.net手册所述返回0或1。

但是,如果$ _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()不会更改传递给它的变量的类型。 因此,您实际要做的是将“ abc”与“ 2012”进行比较,因为date()返回一个字符串。

intval会将任何东西都转换为int ,即使只是变为0 ,这意味着is_int因此始终为true is_int(intval())因此毫无意义。 $_GET值将始终是字符串,即使它们仅包含数字。 因此,您可能想使用ctype_digit进行检查,它可以告诉您字符串中的所有字符是否都是数字。 因此,您的支票应类似于:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM