2010-01-07 56 views
4

由於我將錯誤報告級別更改爲error_reporting(E_ALL | E_STRICT);,因此我正面臨此錯誤。我可以使用isset()避免這個錯誤,但代碼看起來非常難看!注意:未定義索引:XXX - 真的很重要嗎?


所以我的問題是:如果我回到正常的錯誤報告設置該怎麼辦?知道某些東西還沒有定義真的很重要嗎?因爲它沒有通知錯誤就可以正常使用。

,因爲我有+10的投入,我讓他們這樣的:

$username = $_POST['username']; 

我也試圖預先定義在該文件的頂部使用這個變量。

$username = null; and $username = 0;但他們不工作。

謝謝。

回答

10

確實很重要。錯誤減慢了PHP,你真的應該設計你的應用程序不要拋出錯誤。在PHP繼續執行腳本的情況下,許多其他語言將完全死亡。

開發時,腳本不應該拋出任何錯誤(甚至是E_NOTICE)。

+1

+1是的。我也這麼想。爲什麼我使用錯誤報告是因爲我在博客文章中讀到,開發人員應該知道他們的腳本到底發生了什麼。但是在這樣的情況下,我沒有時間。 – MoeAmine 2010-01-07 09:22:03

7

我會建議創建一個簡單的函數來獲取$ _POST值併爲您進行檢查。

例如

<?php 
function getPost($key) 
{ 
    return isset($_POST[$key]) ? $_POST[$key] : null; 
} 

編輯:

顯然,這是不明確的OP 如何使用此:

$username = getPost('username'); 
+0

+1,甚至比$ username = isset($ _ POST ['username'])更好? $ _POST ['username']:false; – r3zn1k 2010-01-07 09:15:30

+3

對於丟失的鍵您最好返回null而不是false - 鍵值可能與false值一起存在。 – 2010-01-07 09:17:06

+0

@adam你是正確的 – hobodave 2010-01-07 09:19:00

2

這意味着在POST數組中沒有關鍵的 '用戶名'。

通常,檢查並更正這些內容是一個不錯的主意,因爲它們可能會影響到應用程序中依賴於缺失值的其他部分。

+0

中取回那樣微不足道,這意味着關鍵的'用戶名'(或等價物)是未定義的 – 2010-01-07 09:16:22

+0

這是狡辯。 – Gordon 2010-01-07 09:27:04

+2

但是你不必檢查isset。 PHP提供了array_key_exists,不管實際價值如何,它都完全符合它的要求,Gordon也沒有提出任何暗示使用其中一個的建議。這*確實使它變得狡猾。 – 2010-01-07 09:46:34

1

聲明確實有一個目的:它們是檢測代碼中潛在錯誤的工具。如果您編寫觸發平凡操作通知的代碼,並且您不願意更改它,則必須禁用通知報告,從而拒絕有用的工具,並使您的工作比所需更難。從歷史上看,PHP的設計極其簡單(在舊版本中,你只需要一個$用戶名,可用零行代碼),但是這種方法在網絡演化中證明是非常不合適的:它只會導致代碼不安全,難以維護。

2

它確實很重要 - 當我在一個PHP應用程序中出現奇怪的行爲時,錯誤日誌是我看起來的第一個地方,十個中有九個是「UNDEFINED INDEX」消息,直接導致了根本原因。

1

所有的錯誤都應該被解決,不管級別如何,便攜性。

如果您構建的應用程序沒有解決嚴格的錯誤,並且您的應用程序部署在確實有嚴格錯誤報告的服務器上,那麼您的應用程序將很快崩潰。

最好的辦法是檢查$ _POST ['username']是否存在,然後獨立執行該返回值。使用isset()您的返回值可以是true或false。

我猜$ _POST ['用戶名']是用於一些描述的身份驗證系統?因此,如果您的isset()函數返回false,那麼您可能會顯示一個詳細信息給用戶的錯誤,該用戶名是必需的。