2016-12-15 52 views
0

我正在向傳統PHP添加一些代碼,以便使用filter_input_array()驗證來自AJAX請求的URL的$_GET參數。

對函數進行編碼後,我自然想要測試它。

我在工作,發佈了一些我在家寫的代碼,所以不得不重現memeory中的要點。然而,這段代碼確實反映了我在家中遇到的問題(以我家庭代碼的更清晰的方式)。

我''測試'很快&髒。一個PHP頁面反覆清除$_GET(通過取消設置並重新聲明它),向其添加一些參數並調用filter_input_array()

我開始不知道這是否是有效的...

<?php 
    echo('$_GET, at start of script<br>'); 
    var_dump($_GET); 
    echo('<hr>'); 

    echo('unset($_GET), then dump it()obviously, we expect an error<br>'); 
    unset($_GET); 
    var_dump($_GET); 
    echo('<hr>'); 

    echo('Now, define $_GEt as an array, and add a few items, and validate it<br>'); 
    $_GET = array(); 
    $_GET['one'] = 1; 
    $_GET['two plus two'] = 5; 
    var_dump($_GET); 
    echo('<hr>'); 

    echo('Now, attempt to validate the $_GET<br>'); 

    $fileters = array('one' => FILTER_VALIDATE_INT, 
         'two plus two' => FILTER_VALIDATE_INT, 
         ); 

    $validateGet = filter_input_array(INPUT_GET, $fileters, false); 
    echo('Validation result = '); 
    var_dump($validateGet); 
?> 

$ _GET,在腳本陣列(0){}

未設置($開始_GET),然後轉儲它()顯然,我們期望一個錯誤E_NOTICE:
類型8 - 未定義變量:_GET - 在第8行NULL

現在,將$ _GEt定義爲一個數組,並添加一些項目並驗證它。
array(2){[「one」] => int(1)[「two plus two」] => int(5 )}

現在,嘗試 驗證$ _GET
驗證結果= NULL

1)什麼是與filter_input_array()回事?

2)爲什麼結果null,當文檔說它會是false失敗?我應該檢查哪個?我目前使用if $validateGet === false

+0

它確實是一個不好的做法,使用超全局變量('$ _GET,$ _ POST,$ _REQUEST')這種方式。你應該使用它們作爲只讀變量。請參閱http://softwareengineering.stackexchange.com/a/76410/251694 –

+1

文檔還說「如果變量未設置,則爲NULL」,因此您的'_ _GET'絕對不是'filter_input_array'所期望的。 –

回答

1

函數filter_input_array似乎沒有使用$_GET,因此在此var上所做的更改未被驗證函數使用。

如果您確實需要更改此var的值(我認爲這不是一個好習慣),您必須將filter_input_array()替換爲filter_var_array()。此功能使用修改後的變種,並給出了預期的結果

http://ideone.com/x5D3Pb

+0

一個很好的答案。很明顯,我不應該在追蹤'$ _GET' - 這只是爲了測試,並且永遠不會用在生產代碼中。 – Mawg

相關問題