我在網站上有註冊表單,註冊調用一個接受$ _POST值作爲參數的函數。在經歷通常的檢查時,如果發現錯誤,則它在錯誤消息類中使用設置錯誤的函數,並且還增加錯誤計數器變量。 該函數接受兩個參數:字段和錯誤消息(存儲在數組中)。變量在新頁面加載過程中未設置
$errmsg->setError("firstname", "You must enter your name");
SETERROR()設置錯誤:
function setError($field, $errMsg){
$this->errors[$field] = $errMsg;
}
寄存器功能檢查是否錯誤計數器已經增加,如果沒有它註冊的賬號,如果是,那麼它重定向回註冊頁面。
註冊頁面使用的函數的ERRMSG類顯示任何錯誤:
$errmsg->showError("firstname");
// Argument being the field name.
此功能應顯示已設置的任何錯誤消息:
function showError($field) {
if (isset($this->errors[$field])) {
return $this->errors[$field];
} else {
return "";
}
}
所以,你可以看到如果數組定義了索引,則應該顯示該值,如果不是,則不顯示任何內容。
我遇到的問題是即使出現錯誤也沒有顯示任何內容。
我試着迴應$ errmsg-> errors ['firstname'];在寄存器功能中,如果錯誤計數器大於0,並且顯示正確的消息。所以我知道數組鍵被設置,如果我更改else語句返回一個字符串,如果數組鍵不存在它也可以正常工作。所以出於某種原因價值正在被設置,然後在頁面重新加載後再次丟失。
我也嘗試創建錯誤消息類中的函數返回可以通過寄存器功能時,已發現的錯誤被稱爲數組:
function getErrorArray(){
return $this->errors;
}
這也什麼也沒做。是100%肯定的數組鍵存在於這個我試過運行寄存器功能的時間:
if ($errors > 0) {
if(isset($errmsg->errors['firstname'])) {
header("Location: ".$session->referrer);
} else {
header("Location: http://www.google.com");
}
正如預期的那樣,如果有錯誤(我在這裏工作的錯誤是一個空字符串)它會重新導向並顯示該消息,以及該字段何時包含將其重定向到Google的值。的
if(array_key_exists($field,$this->errors))
代替:
我也嘗試使用
if(isset($errmsg->errors['firstname']))
我真的不明白爲什麼這是行不通的,它是一個範圍的問題嗎?我應該將它存儲在$ _SESSION中嗎?任何指針將不勝感激。謝謝。
最初我確實有它在請求期間顯示錯誤,但我希望它重新顯示帶有錯誤的窗體。加上(一次工作)我可能會改變類不只顯示錯誤,而是處理所有的迴應。 – Tom
使用$ _SESSION重寫並正常工作,感謝您的建議。 – Tom