2013-02-13 1 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 через каждую строку, проверяя, содержит ли эта строка isset в массиве $ _POST, если это не так, я проверяю, является ли это требуемым значением. Если это действительно требуемое значение, я хочу создать ассоциативный массив со строкой (например, «uName») в качестве ключа в массиве со значением, являющимся чем-то вроде «Это поле необходимо» таким образом, когда я перенаправляю его обратно моя форма, я могу получитьErrors из моего класса и отобразить их, когда это необходимо в форме.

Заранее благодарим за любую помощь.

ответ

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

Эта линия выглядит его создания и массив массивов

Является ли это не то, как это вы ищете?

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

Хорошо ... да, у меня было, что в какой-то момент, но когда там я получаю это для распечатки ... 'Array ([cpWord] => Это поле обязательно для заполнения)' Это то, что я хочу, но ... cpWord не было единственным значением, которое не было заполнено, я также оставил uName и pWord незаполненными. Это похоже на то, что он должен делать, но заменяет значения внутри массива вместо добавления ошибок. Редактировать: Я пытался использовать что-то вроде array_push, но это тоже не работает, или, по крайней мере, так, как я это делал. –

+0

Как вы печатаете значения в массиве на экране? – cosmicsafari

+0

Пользовательский класс перенаправит пользователя обратно в форму и над каждым элементом будет иметь тег div с условием, если задано условие $ errors ['uName'] и т. Д. (Полученное из функции getErrors), отображение это сообщение над элементом. –