2010-09-23 88 views
1

我正在創建一個依賴$ _GET正常工作的網站。 它的工作原理是這樣的:http://www.example.com/show?q=14&i=48qi是必須使用mysql_query()等獲取的MySQL服務器上的ID。參數總是整數。php url參數檢查

如果有人在沒有任何參數的情況下輸入url,PHP和MySQL都會報錯。 PHP的未定義變量和MySQL的語法不正確。

我到目前爲止嘗試過的東西不起作用,我總是得到「錯誤」;

if (is_int($_GET['q']) AND is_int($_GET['i'])) 
{ 
echo "All good."; 
} 
else 
{ 
echo "Error."; 
} 

我在做什麼錯在這裏。

感謝, ATNO

回答

2

那是因爲你正在檢查的該類型變量而不是其內容。通過$_GET來自查詢字符串的任何內容都被視爲一個字符串,因此如果使用is_int(),則應該使用ctype_digit(),並檢查值是否與empty()一起存在。

+0

+1,我的想法正好。 ''ctype_digit()'或者甚至在執行'$ _GET ['i'] =(int)$ _ GET ['i'];' – 2010-09-23 14:56:48

+0

Casting也可以,但我寧願拒絕錯誤的輸入 – 2010-09-23 14:58:08

+0

謝謝,按預期工作。 – afarazit 2010-09-23 15:12:21

2

,您應該使用的is_numeric代替is_int
is_int返回數字字符串的false

缺點是is_numeric函數也會返回true,如"1.5"。 如果你不希望出現這種情況,你可以檢查功能here

0

你應該嘗試isset($ _ GET [Q])

if(isset($_GET[q]) && isset($_GET[i])){ 

} 
+0

isset()不是正確的函數來解決它,因爲kemp說$ _GET中的所有內容都被視爲一個字符串。所以http://www.example.com/show?q=&i=返回「一切都好」。 – afarazit 2010-09-23 15:14:14

+0

根據這個問題,你的例子中的情況不會發生。他說,「如果有人在沒有任何參數的情況下輸入網址,PHP和MySQL都會大聲疾呼。」在你的例子中有兩個參數。我的部分解決方案僅在PHP方面有所幫助,但不在MySQL方面。 – 2010-10-04 19:11:48