2016-07-14 28 views
4

驗證用戶輸入時使用這兩個函數之一有什麼區別?嚴格地說,關於函數調用,不需要改變$ _POST數組。輸入數據驗證時filter_var和filter_input之間的區別

$ result = filter_var($ _ POST ['user_input'],FILTER_VALIDATE_INT);

VS

$結果= filter_input(INPUT_POST, 'USER_INPUT',FILTER_VALIDATE_INT);

或者上述兩個調用沒有區別,甚至不是表現明智,而只是一個偏好問題?

PS:我知道在SO - Differences between filter_var and filter_input上有類似的問題 - 但只是說明應如何調用2個方法,而不是實際的區別。

+0

我不認爲有這樣的區別,'filter_input'設計簡單採取一個輸入作爲參數,'filter_var'將採取變量,因此它更通用的基準柱(我會去檢查文檔並作出迴應) – RDardelet

回答

0

如果請求主體完全不包含參數user_input$_POST['user_input']將觸發通知,filter_input(INPUT_POST, 'user_input', ..)不會。

+0

是的,所以'$ _POST'應該先檢查isset()',如果缺少賦值給'$ result = null;'實例,而'filter_input'會在這種情況下直接返回'null'。 否則,如果參數設置,沒有區別? –

+0

是的,如果參數存在,則沒有區別。不同之處在於'filter_input'透明地處理了缺少輸入的情況。 – deceze

3

從我讀上php.net,

filter_var只會在你的代碼中的任何變量的工作,當你使用它,它會在那一刻檢查值。

filter_input值將檢查原始值您輸入的,這意味着如果你改變$_POST['something'],該filter_input(INPUT-POST, "something", FILTER)將執行你改變它收到了價值進行檢查。 當未設置值時,它似乎也不會觸發執行E_NOTICE

php.net

+0

而不是「filter_var(...)將執行檢查之前,它已經有的值」,你的意思是'filter_input',不是?這就是爲什麼我提到'$ _POST'數組不需要改變,所以基本上這種差異仍然如前面提到的@deceze:通知被觸發。 –

+0

對不起,我現在正在編輯:D 儘管如此,如果您的代碼在可以改變$ _POST/GET ...變量的CMS或框架之後執行,訪問原始輸入仍然非常有用。 – RDardelet

相關問題