2012-02-21 37 views
0

也許是一個非常簡單的問題,但我不知道我做錯了什麼,也許有人可以幫助我?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位數,那麼! :)

回答

1

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

1

intval()不會更改傳遞給它的變量的類型。所以你真的做比較'abc'到'2012',因爲date()返回一個字符串。

+0

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