2011-05-30 101 views
0

我現在有這樣PHP的錯誤處理

function checkInput($content, $emptyMessage = ""){ 
    if(isset($content)){ 
     return sanitize($content); 
    }else{ 
     return $emptyMessage; 
    } 
} 

一個功能,我使用它是這樣的:

/* First get all data out of key and put it in array*/ 

//now check the input if user has set certain fields 
$email = checkInput($user["email"],"No email address given"); 

echo $email; 

現在,我得到:未捕獲ErrorOrWarningException。 我可以想到兩種解決方案:

關閉錯誤>不喜歡那個。

手工做的每一個領域像

if(isset($user["email"])){ 
    $email = sanitize($user["email"]); 
}else{ 
    $email = "No email address given"; 
} 
echo $email; 

這吮吸可讀性。 另一種方法是將try/catch語句但那幾乎相同長度的輸入

+1

爲什麼寫自己的驗證邏輯時,你可以使用像'filter_var()',只是擔心傳遞正確的選項? – 2011-05-30 01:57:22

+0

我不確定,但我認爲你的函數的問題,第二個參數是可選的,所以它可能根本沒有設置,然後你嘗試返回一個變量可能會或可能不會設置。所以我建議讓你的第二個參數不是可選的,然後看看會發生什麼。 – SIFE 2011-05-30 02:04:14

回答

1

當用參數聲明一個函數時,參數將始終在裏面設置函數。

function checkInput($content, $emptyMessage = "") { 
    // $content is always "set" here, no need for isset() 

你得到一個警告,如果你試圖訪問一個不存在的變量在這裏:

checkInput($user["email"], "No email address given"); 
    //  ^^^^^^^^^^^^^^ 
    // if 'email' is not set, a warning is thrown here 

你總是需要確保"email"關鍵是試圖之前設置將它的值傳遞給一個函數。

話雖如此,這可能不是你的ErrorOrWarningException的原因。我不知道從哪裏來,這不是標準的PHP。我想你的sanitize函數正在拋出它。如果是這樣,你需要trycatch在你的checkInput函數中。

0

如果你不想用一個try/catch,你可以做這樣的事情早在你的代碼:

function exception_handler($exception) { 
    //Insert whatever you want to do when an exception is raised outside of a try/catch 
} 

set_exception_handler('exception_handler'); 
0

什麼是這樣的:

function checkInput($var, $emptyMessage = '') 
    if (isset($$var)) { 
    return sanitize($$var); 
    } else { 
    return $emptyMessage; 
    } 
} 

,或者類似的,

function checkInput($var, $key, $emptyMessage = '') 
    if (isset($var[$key]) { 
    return sanitize($var[$key]); 
    } else { 
    return $emptyMessage; 
    } 
}