簡體   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