2013-02-13 95 views
0

这里是我开始写一个类来通过注册表单向我的数据库添加一个新用户的类。一切工作正常,直到我试图做后端检查,看看是否提供所需的值。下面是代码...基于动态关键字的PhP关联错误数组=>值

class User 
{ 
//Basic Login variables 
private $uName; 
private $pWord; 
private $cpWord; 
private $shaPass; 

//Account info vars 
private $fName; 
private $lName; 
private $email; 
private $confEmail; 
private $mPhone; 
private $hPhone; 

//Trading info vars 
private $trName; 
private $phone; //Defaults to home phone, or cell, if no home number specified. 
private $fax; 
private $web; 

//Home Address vars 
private $h_addr1; 
private $h_addr2; 
private $h_city; 
private $h_state; 
private $h_zip; 

//Postal Address vars 
private $p_addr1; 
private $p_addr2; 
private $p_city; 
private $p_state; 
private $p_zip; 

private $not_required_vars; 
//Post name collection 
private $post_coll; 
//Error collection 
private $errors; 

public function User() 
{  
    $this->not_required_vars = array('fax', 'web'); 
    $this->post_coll = array('uName', 'pWord', 'cpWord', 'fName', 'lName', 'email', 'confEmail', 'dob', 'mPhone', 'hPhone', 'trName', 'phone', 'fax', 'web', 'h_addr1', 'h_addr2', 'h_city', 'h_state', 'h_zip', 'p_addr1', 'p_addr2', 'p_city', 'p_state', 'p_zip'); 
    //print_r($_POST); 

    foreach($this->post_coll as $index) 
    { 
     if(isset($_POST[$index]) && (!empty($_POST[$index]))) 
     { 
      //echo $index . '<br />'; 
      $this->{$index} = $_POST[$index]; 
     }else 
     { 
      foreach($this->not_required_vars as $not_req) 
      { 
       if($index != $not_req) 
       { 
        //echo $index . '<br />'; 
        $this->errors = array(); 

        $this->errors[] = array($index=>'This field is required'); 
        break; 
        //header('location: '.$_SERVER['PHP_SELF'].'?page='. $_GET['page'] . '&error=1'); 
       } 
      } 
     } 

    } 
    print_r($this->errors); 
} 

让我尝试解释什么上面呢...我有$ _ POST称为“post_coll人指数字符串数组,以节省您的时间。然后,我通过每个字符串的foreach循环检查是否在$ _POST数组中设置了该字符串,如果不是,我检查它是否为必需值。如果它确实是一个需要的值,我想创建一个带有字符串(如'uName')的关联数组作为数组中的一个键值,该值类似于“此字段是必需的”,这样当我将其重定向回我的表单可以从我的课程中获得错误信息,并在窗体上的适当位置显示它们。

在此先感谢您的帮助。

回答

2
$this->errors[] = array($index=>'This field is required'); 

这行看起来像它的创建和数组的数组

这难道不是这样的事情你正在寻找?

$this->errors[$index] = 'This field is required'; 
+0

好吧......是的,我有这样的一个点,但如果这是有我得到这个用于打印出... '阵列([cpWord] =>这是必须填写)' 这就是我想要的,但是...... cpWord不是唯一没有填写的值,我也离开了uName和pWord。这就像它在做它应该做的事情,但是替换数组中的值而不是附加错误。 编辑:我试图使用类似array_push的东西,但这也不起作用,或者至少我没有这样做。 – 2013-02-13 10:20:47

+0

如何将数组中的值打印到屏幕上? – cosmicsafari 2013-02-13 10:23:30

+0

User类会将用户重定向回到表单并在每个元素上方我将拥有一个div标签,其中包含一个条件,说明是否设置了$ errors ['uName'] etc ...(从getErrors函数获取),显示它是元素上方的消息。 – 2013-02-13 10:29:56