php - 尝试让我的登录代码正常工作

标签 php mysql pdo

您好,我正在关注有关 php/mysql/PDO 的教程,名为:PHP OOP 登录/注册系统。

我认为 vid 是很久以前创建的,并且 php 代码中的内容发生了变化,现在我没有收到登录成功说明。

登录.php

    <?php
require_once '../core/config/conf.php';

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

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

        if($validate->passed()) {
            $user = new User();
            $login = $user->login(Input::get('gebruikersnaam'), Input::get('wachtwoord'));

            if($login) {
                 echo (isset($user) && ($user->isLoggedIn())) ? 'Ingelogd!' : 'Inloggen ging fout.';            
        } else {
            foreach ($validate->errors() as $error) {
                echo $error, '<br />';
            }
        }

    }
}
}

?>

 <form action="" method="post">
     <div class="field">
         <label for="gebruikersnaam">Gebruikersnaam</label>
         <input type="text" name="gebruikersnaam" id="gebruikersnaam" autocomplete="on">
     </div>

     <div class="field">
         <label for="wachtwoord">Wachtwoord</label>
         <input type="password" name="wachtwoord" id="wachtwoord" autocomplete="off">
     </div>

     <input type="hidden" name="token" value="<?php echo Token::generate(); ?>">
     <input type="submit" value="Inloggen">
 </form>

用户.class.php

<?php

class User {

    private $_db,
                  $_data,
                  $_sessionName,
                  $_isLoggedIn = null;


    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($user) {
                    ($this->find($user)) ? $this->_isLoggedIn = true : $this->_isLoggedIn = false;
                } else {
                    echo 'Class fout';
                }                    
            }
        } else {
            $this->find($user);
        }
    }

    public function create($fields = array()) {
        if(!$this->_db->insert('users', $fields)) {
            throw new Exception('Ooops... daar ging iets fout.');
        }
    }

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

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

    public function login($user = null, $pass = null) {
        if(isset($user) && ($this->find($user))) {
            if($this->data()->password === Hash::make($pass, $this->data()->salt)) {
                Session::put($this->_sessionName, $this->data()->u_id);
                return true;
            }
        }             
        return false;
    }

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

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

这个方法是LoggedIn();即使我检查了login(),也没有返回true;和查找();方法,它们似乎按计划工作,但不知何故它并没有告诉我我已经登录。

谢谢。

最佳答案

您从未设置 _isloggedin 变量

public function login($user = null, $pass = null) {
        if(isset($user) && ($this->find($user))) {
            if($this->data()->password === Hash::make($pass, $this->data()->salt)) {
                Session::put($this->_sessionName, $this->data()->u_id);
  // set it here
 $ this->_isloggedin = true;
                return true;
            }
        }             
        return false;
    }

关于php - 尝试让我的登录代码正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23376451/

相关文章:

php - SQL 查询仅从字符串列中获取第一个单词

php - 如何创建PHP Mysql日报而不重复代理名称?

php - beanstalkd 怪异,返回无效的工作

PHP MYSQL 从表中验证用户并设置 SESSION 'username'

php - PDO 语句什么都不做?

php - MySql 准备更新查询失败

php - PHP/MySQL 中的 PDO 和 UTF-8 特殊字符?

php - SQL/PHP PDO选择随机行

php - 未捕获的异常 'PDOException',消息为 'SQLSTATE[HY093]: Invalid parameter number'

php - mysql_fetch_array($result_type=MYSQL_BOTH) 如何返回关联索引和数字索引?