其他答案已經回答了你的直接問題,但我認爲這裏有更深層次的東西需要解釋。
您通常希望避免訪問您不確定存在的數組索引。
例如:
$a = array('foo' => 'bar');
echo $a['test']; //bad!
這同樣適用於$ _GET,_POST,$ COOKIE,等等,除非你知道它們的存在,不要訪問索引。
請注意,對於用戶定義的索引,這將轉換爲「除非您已檢查它們是否存在,否則不要訪問索引」。
$content = $_GET['content']; //ALWAYS wrong
你必須檢查數組索引三個選項:isset,空,array_key_exists。
isset($x)
如果$ x非空,則返回true。 isset
基本上等同於:$x !== null
,但isset不會發出未定義的索引/變量通知。
(empty($x) === (!isset($x) || !$x))
換句話說,空考慮任何鬆散等於假是空的。這在某些情況下很有用。
array_key_exists($key, $array)
是一個簡單的保證$array[$key]
不會發出未定義的索引通知。
那麼以適當的方式提取用戶輸入最簡單的方法是什麼?
$content = (isset($_GET['content'])) ? $_GET['content'] : null;
如果用戶提供了輸入,那麼您在這一點上有一個特別的保證$content !== null
。
請注意,您也應該避免永遠不必離開不確定變量的excecution路徑:
if (isset($_GET['content'])) {
$content = $_GET['content'];
}
echo $content; //WRONG - $content is not guaranteed to be defined
你可以使用$內容在這種情況下,如果它被包裹在isset或空的,但妨礙了代碼的可讀性。如果您想在某些條件下保留一個未定義的變量,請將其定義爲null。如果沒有它發出變量不存在警告,這會將其視爲「未定義」。
$a = null;
var_dump($a === $b); //true, because the non-existent $b is treated as false
//(note that this is terrible style though -- this would issue a variable doesn't exist warning for $b
還有,當然,PHP的filter擴展。特別是,您可以使用filter_input來避免重寫大量用於處理用戶輸入的代碼。
你可以在正確的部分閱讀更多關於正確(或偏執,有些人可能稱之爲)輸入處理here或here。
順便說一句,你應該總是有錯誤的發展手搖一路上漲,你應該監視任何類型的錯誤(警告,通知等)。這將有助於防止潛在的邏輯錯誤,並且它會保持代碼清潔。 (好像是從來沒有發出通知的代碼和編寫良好的代碼之間的相關性。)
'$ course = isset($ _ GET ['usercourse'])? $ _GET ['usercourse']:「All」;' –
@SalmanA你應該將其作爲答案發布,尤其是因爲這是迄今爲止寫在這個問題上的最好的東西。 (這是令人沮喪的多少錯誤信息已經在這個問題上得到了回答......) – Corbin
除了聲明之外,發佈的代碼應該工作,除非你想區分'usercourse'作爲空字符串或0傳遞而根本不傳遞。什麼不適合你? –