I am stuck on part 12 of PHP OOP Login and Register

0 elli shnoo · August 10, 2015
HI there
I have been following Alex's tutorial to the letter
and getting errors half way through this 12th lesson
getting error....
 Fatal error: Call to a member function get() on a non-object
its in the file Validate
on line 38 ...
which is the second line here...
                     
                        case 'unique':
                             $check = $this->_db->get($rule_value, array($item, '=', $value));
                             if($check->count()) {
                                 $this->addError("{$item} already exists. ");
                             }                             
                         break;

Ive put the whole code below
Ive checked it for errors over and over
but cant find any
Any help would be greatly appreciated
CHeers
Elli :)

<?php
class Validate {
    private $_passed = false,
            $_errors = array(),
            $_db = null;

    public function __contruct() {
        $this->_db = DB::getInstance();
    }

    public function check($source, $items = array()) {
         foreach($items as $item => $rules) {
             foreach($rules as $rule => $rule_value) {

                 $value = trim($source[$item]);
                 $item = escape($item);

                 if($rule === 'required' && empty($value)) {
                     $this->addError("{$item} is required");
                 } else if(!empty($value)) {
                     switch($rule) {
                         case 'min':
                             if(strlen($value) < $rule_value) {
                                 $this->addError("{$item} must be a minimum of {$rule_value}");
                             }
                         break;
                         case 'max':
                             if(strlen($value) > $rule_value) {
                                 $this->addError("{$item} must be a maxium of {$rule_value}");
                         }
                         break;
                         case 'matches':
                             if($value != $source[$rule_value]) {
                                 $this->addError("{$rule_value} must match {$item}");
                         }
                         break;
                         case 'unique':
                             $check = $this->_db->get($rule_value, array($item, '=', $value));
                             if($check->count()) {
                                 $this->addError("{$item} already exists. ");
                             }                             
                         break;
                     }
                 }
             }
         }
         if(empty($this->_errors)) {
             $this->_passed  = true;
         }
         return $this;
     }

     private function addError($error) {
         $this->_errors[] = $error;
     }
     public function errors(){
         return $this->_errors;
     }
     public function passed(){
         return $this->_passed;
     }
}

Post a Reply

Replies

Oldest  Newest  Rating
0 Steen Pedersen · September 15, 2015
$check = $this->_db->get($rule_value, array($item, '=', $value));
This line(38) set $check as an boolean and thefore a non-object.

you can use thoose 2 lines insted:
$check=$this->_db;
$check->get($rule_value, array($item,'=', $value));

It vil do the same and set $check as a instance of the DB, and then you can run the method.
0 nmelssx nmelssx · September 23, 2015
Haha. I can't watch Alex's tutorial. Started the PHP register and login on one of Bucky's old tutorials.
  • 1

PHP

107,269 followers
About

Server-side, HTML embedded scripting language used to create dynamic Web pages.

Links
Moderators