2012-10-25 128 views
1

我想用php驗證一個表單。在課堂結構中訪問數組

爲此我創建了一個類「benutzer」和公共職能「benutzerEintragen」這一類的驗證形式:

class benutzer 
{ 
private $username = ""; 
private $mail = ""; 
private $mail_check = ""; 
private $passwort = ""; 
private $passwort_check = ""; 
public $error_blank = array(); 
public $error_notSelected = array(); 
public $error_notEqual = array(); 

    public function benutzerEintragen() { 
    $textfields[0] = $this->username; 
    $textfields[1] = $this->mail; 
    $textfields[2] = $this->mail_check; 
    $textfields[3] = $this->passwort; 
    $textfields[4] = $this->passwort_check; 
    foreach ($textfields as $string) { 
     $result = checkFormular::emptyVariable($string); 
     $error_blank[] = $result; 
    } 

在功能「benutzerEintragen」我充滿了變數「的用戶名,郵件」和以此類推適當的$ _POST條目(未在上面的代碼中顯示)。電話

checkFormular::emptyVariable($string) 

只是返回「TRUE」,如果該字段未設置或否則爲空否則爲FALSE。

現在,當我嘗試創建此類的新實例時,執行該函數並獲得對$ error_blank [0]的訪問,該數組爲空!

if (($_SERVER['REQUEST_METHOD'] == 'POST')){ 
$BENUTZER = new benutzer(); 
$BENUTZER->benutzerEintragen(); 
echo $BENUTZER->error_blank[0];} 

所以最後一行是通知「通知:未定義偏移量:0」。這似乎與陣列結構有關,因爲如果我做

echo $BENUTZER->mail; 

我得到我在窗體中寫的任何輸入,這是正確的。當我在phpEd中運行調試器時,foreach循環似乎也做了正確的事情,但似乎數組「error_blank」在執行該函數後被擦除。

任何幫助將不勝感激。提前致謝。

+0

是checkFormular :: emptyVariable聲明爲靜態方法嗎?你需要聲明爲靜態的,以便使用'::'來訪問它,或者用'new checkFormular'實例化它,並在實例變量上使用' - >'。 –

+0

感謝您的評論。我確實聲明它是靜態的,但忘了提及它。 –

回答

0

這裏有一個範圍問題。你有一個名字的類屬性。與在Java中使用與名稱相同的局部變量作爲類變量自動選擇類屬性不同,這在PHP中不是這種情況。

基本上你將你的輸出保存在一個局部變量中,一旦你離開函數就會被丟棄。將$error_blank[] = $result;更改爲$this->error_blank[] = $result;,你應該沒問題。

+0

謝謝你是這個問題。現在它像一個魅力。 –

+0

很高興我能幫到你。 – Dan

0

首先,這看起來過於複雜的方式來做一個簡單的任務,但這實際上不是問題。

您正在創建一個僅在函數範圍內的新$ error_blank變量。如果你想使用類變量,你應該使用$ this-> error_blank []