2012-12-10 50 views
1

我在網站上有註冊表單,註冊調用一個接受$ _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中嗎?任何指針將不勝感激。謝謝。

回答

2

是的,你應該存儲在$_SESSION。 PHP變量只存在於當前請求的範圍內。一旦請求完成,變量就會丟失。重定向創建了一個新的請求。

您也可以在同一請求(當用戶將數據發佈到您的服務器時)顯示錯誤。

+0

最初我確實有它在請求期間顯示錯誤,但我希望它重新顯示帶有錯誤的窗體。加上(一次工作)我可能會改變類不只顯示錯誤,而是處理所有的迴應。 – Tom

+0

使用$ _SESSION重寫並正常工作,感謝您的建議。 – Tom

2

如果要在2個請求之間保存數據,則必須使用$_SESSION或某些數據庫系統。

function setError($field, $mess) { 
    $_SESSION['errors'][$field] = $mess; 
} 

您的代碼很好,但您需要重構會話數組。

1

PHP是無狀態的。所以如果刷新頁面,變量將被重置。這就是爲什麼我們在SESSION數組中存儲重要信息的原因。 $ _SESSION將是最好的方法。

問候

相關問題