2012-10-25 131 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 []