OOP登录/注册系统

时间:2016-01-09 13:27:03

标签: php mysql oop login

如果我想登录,我还有login.php的另一个问题,我记得我'但检查一切正常。但是当我取消它时,我得到了这个错误。

我是php的新手,我将这个系统用于一个小课程,所以我知道它已经很老了,但我真的很想完成它,我就是这样学习的。

注意:未定义的变量:C:\ wamp \ www \ websitegroop \ classes中的hashCheck">"第63行的\ user.php 调用堆栈

1 0.0006 255552 {main}().. \ login.php:0 2 0.0094 386832 User-> login().. \ login.php:25

致命错误:在第63行的C:\ wamp \ www \ websitegroop \ classes \ user.php中调用非对象的成员函数count() 调用堆栈

1 0.0006 255552 {main}().. \ login.php:0 2 0.0094 386832 User-> login().. \ login.php:25

这是我的代码:

的login.php

 enter code here <?php
                 require_once 'core/init.php';


                  if(Session::exists('login')) {
                  echo '<p>' . Session::flash('login') . '<p>';
                   }

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

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

    ));



    if($validation->passed()) {
        $user = new User();

        $remember =(Input::get('remember') === 'on') ? true: false;
        $login = $user->login(Input::get('gebruikersnaam'),              Input::get('paswoord'), $remember);

        if($login) {
            Redirect::to('index.php');
        } else {
            echo '<p> Sorry het is niet gelukt om in te loggen. </p>';
        }

    } else {
        foreach($validation->errors() as $error) {
            echo $error, '<br>';
        }
    }
}

}
?>

hash.php

enter code here  <?php
 class Hash {
public static function make($string, $salt = '') {
    return hash('sha256', $string . $salt);
}

public static function salt($length) {
    return mcrypt_create_iv($length);
}

public static function unique() {
    return self::make(uniqid());

}
}

user.php的

enter code here <?php


class User {
private $_db,
        $_data,
        $_sessionName,
        $_cookieName,
        $_isLoggedIn;       

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

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

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

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

            }
        } else {
    }       $this->find($user);
   }
  }

public function create($fields = array()) {
    if(!$this->_db->insert('groopklanten', $fields)) {
        throw new Exception('Er is een probleem met het maken van een  account.');
    }

}

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

        if($data->count()) {
            $this->_data = $data->first();
            return true;

        }
    }
    return false;
}

public function login($gebruikersnaam = null, $paswoord = null, $remember) {
    $user = $this->find($gebruikersnaam);

    if($user) {
        if($this->data()->paswoord === Hash::make($paswoord, $this->data()->salt)) { 
            Session::put($this->_sessionName, $this->data()->id);

            if($remember) {
                $hash = Hash::unique();
                $hashCheck = $this->_db->get('users_session_table', array('user_id', '=', $this->data()->id));              }

                if(!$hashCheck->count()) {
                    $this->_db->insert('users_session_table', array(
                        'user_id' => $this->data()->id,
                        'hash' => $hash
                    ));
                } else {
                    $hash = $hashCheck->first()->hash;
                }
                Cookie::put($this->_cookieName, $hash,                 Config::get('remember/cookie_expiry'));

            }


            return true;

    }

    return false;
}

public function logout() {
    Session::delete($this->_sessionName);   
}

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

public function isLoggedIn() {
    return $this->_isLoggedIn;  
}
 }

的init.php

enter code here <?php
       session_start();

     $GLOBALS['config'] = array(
    'mysql' => array(
        'host' => 'localhost',
        'username' => 'nick16061983',
        'password' => 'N1sn0p1!A',
        'db' => 'websitegroop'
    ),
    'remember' => array(
        'cookie_name' => 'hash',
        'cookie_expiry' => 604800
    ),  
    'session' => array(
        'session_name' => 'groopklanten',
        'token_name' => 'token'

    )
   );

   spl_autoload_register(function($class) {
   require_once 'classes/' .$class. '.php';
   });

  require_once 'functions/sanitize.php';

我希望我提供了足够的信息。

提前致谢,

尼克

2 个答案:

答案 0 :(得分:0)

$ remember变量始终具有真值,但您尚未检查过它。你必须确保:

$remember =(Input::get('remember') === 'on') ? true: false;

有效。或者您可以尝试这样的保留验证逻辑:

$remember =(Input::get('remember') != '') ? true: false;

答案 1 :(得分:0)

因此,查看错误是指出您无法在user.php中的非对象上调用count()。从它的外观来看,你在$ hashCheck变量上调用count函数。这让我觉得有时候没有设置$ hashCheck。这可能是由于以下行中的迷路结束大括号“}”:

'DC'

关闭大括号实际上是让它认为$ remember变量的if语句块在该行结束,而不是你意味着该块结束的位置。看看删除那些额外的结束大括号是否有助于语法错误。