如果我想登录,我还有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';
我希望我提供了足够的信息。
提前致谢,
尼克
答案 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语句块在该行结束,而不是你意味着该块结束的位置。看看删除那些额外的结束大括号是否有助于语法错误。