2015-01-01 2 views
1

Я все еще следую за учебником login/register Я несколько раз просмотрел видео, чтобы увидеть, может быть, я допустил ошибку ввода, но я не могу найти нибудь ошибка, я получаю «Примечание: Попытка получить имущество не-объект»Извещение: Попытка получить свойство non-объекта

Я смотрю вокруг него было предложено попробовать решения ниже, однако это не сработало:

echo $user[0]->data()->username; 

Я знаю, что это как-то связано с моим классом данных, и я думаю, что это мой класс данных, это неправильно.

index.php

<?php 
     require_once 'core/init.php'; 

    if(Session::exists('home')){ 
     echo '<p>' . Session::flash('home', 'You have been registered and can now log in!') . '</p>'; 
    } 

    $user = new User(); 
    echo $user->data()->username; 
    ?> 


    <a href="login.php">Login</a> 

User.php

<?php 
    class User{ 
     private $_db, 
       $_data, 
       $_sessionName; 

     public function __construct($user = null){ 
      $this ->_db = DB::getInstance(); 

      $this->_sessionName = Config::get('session/session_name'); 

     if(!$user){ 
      if(Session::exists($this->_sessionName)){ 
       $user = Session::get($this->_sessionName); 

      if($this->find($user)){ 
       $this->_isLoggedIn = true; 
        }else{ 
         //logout 
        } 
       } 
      } else{ 
       $this->find($user); 
      } 
     } 


     public function create($fields = array()){ 
      if($this->_db->insert('users', $fields)){ 
       throw new Exception('There was a problem creating account'); 
      } 
     } 

     public function find($user = null){ 
      if($user){ 
       $field = (is_numeric($user)) ? 'id' : 'username'; 
       $data = $this->_db->get('users', array($field, '=', $user)); 

       if($data->count()) { 
        $this->_data = $data->first(); 
        return true; 
       } 
      } 
      return false; 
     } 
     public function login($username = null, $password = null){ 
       $user = $this->find($username); 

      if($user){ 
       if($this->data()->password ===Hash::make($password, $this->data()->salt)){ 
        Session::put($this->_sessionName, $this->data()->id); 
        return true; 
       } 
      }  
      return false; 
     } 

     public function data(){ 
      return $this->_data; 
     } 

    } 

login.php

<?php 
require_once 'core/init.php'; 

if(Input::exists()){ 
    if(Token::check(Input::get('token'))){ 

     $validate = new Validate(); 
     $validation = $validate->check($_POST, array(
      'username' => array('required' => true), 
      'password' => array('required' => true) 
     )); 

     if ($validation->passed()){ 
      //log user in 
      $user = new User(); 
      $login = $user->login(Input::get('username'), Input::get('password')); 

      if($login){ 
       echo 'Success'; 


      }else{ 
       echo'<p>Sorry invalid details</p>'; 
      } 
     } else{ 
      foreach($validation->errors() as $error) 
       echo $error, '<br />'; 
     } 
    } 
} 

?> 
<form action="" method="POST"> 
    <div class="field"> 
     <label for="username" id="username"> Username </label> 
     <input type="text" name="username" id="username" autocomplete="off"> 
    </div> 

    <div class="field"> 
     <label for="password" id="password"> Password </label> 
     <input type="password" name="password" id="password" autocomplete="off"> 
    </div> 
    <input type="hidden" name="token" value="<?php echo Token::generate();?>"> 
    <input type="submit" value="Login"> 
</form> 

<a href ="index.php">Home</a> 

session.php

<?php 
class Session { 
    public static function put($name, $value){ 
     return @$_SESSION[$name] = $value; 
    } 
    public static function get($name) 
    { 
     return self::exists($name) ? @$_SESSION[$name] : null; 
    } 
    public static function exists($name) 
    { 
     return @$_SESSION[$name] !== null; 
    } 
    public static function delete($name){ 
     if(self::exists($name)){ 
      unset($_SESSION[$name]); 
     } 
    } 

    public static function flash($name, $string =''){ 
     if(self::exists($name)){ 
      $session = self::get($name); 
      self::delete($name); 
      return $session; 
     } else { 
      self::put($name, $string); 
     } 
    } 
} 
+3

что выход var_dump ($ user-> данные()); – fortune

+0

Я положил в index.php это reutrns NULL –

+2

Если он возвращает NULL, чем как вы можете получить доступ к его свойствам? – kuldipem

ответ

1

Я предполагаю, что это код обижая:

$user = new User(); 
echo $user->data()->username; 

Этот код создает объект пользователя, и мы можем видеть, что конструктор ожидает имя пользователя будет дано (или, возможно, идентификатор?). Если имя пользователя не указано, то похоже, что функция find просто возвращает значение false и, следовательно, массив данных будет пустым. Вот почему вы получаете сообщение об ошибке.

Попробуйте вызвать конструктор с текущим именем пользователя, например.

$user = new User('test'); 

Если это возможно для индексной страницы для загрузки без имени пользователя, то вам просто нужно добавить дополнительную проверку на объекте данных, прежде чем пытаться использовать его, например,

if (@$user->data())  
    echo $user->data()->username; 
else 
    echo "Not logged in"; 
+0

Когда я непосредственно ввожу имя пользователя, он отлично работает, я начал предполагать, что, возможно, это был класс сеанса, была ошибка, я собирался вернуться и снова изучить обучающие программы Session. –

0

Basic опечатка в моем файле init.php, я действительно ненавижу себя ...

+1

Мы все были там :) – phansen

Смежные вопросы