代码点火器登录验证问题

时间:2016-04-02 11:09:03

标签: php codeigniter authentication

我正在使用Code Igniter为自己构建测试网站,并且正在与Logins进行斗争。根据phpMyAdmin,我可以创建新用户并将它们存储在我的数据库中而不会有任何麻烦,但我正在努力实际登录。

我目前的代码是:

控制器:

public function index()
{
    $this->home();
}

public function home()
{
    $this->load->model('model_users');

    $data['emails'] = $this->model_users->getEmails();
    $data['users'] = $this->model_users->getUsers();

    $this->load->view('login', $data);
}

public function validate_credentials() {
    $this->load->model('model_users');
    $query = $this->model_users->validate();


    if($query){
        $data = array(
            'email' => $this->input->post('email'),
            'is_logged_in' => true
        );
        $this->session->set_userdata($data);
        redirect('trade');
    }
    else{
        $this->load->view('about_us');
    }
}

型号:

    <?php
class Model_users extends CI_Model {
    function __construct() {

        parent::__construct(); //Call the model constructor
    }

    function validate() {
        $this->db->where('email', $this->input->post('email'));
        $this->db->where('password', md5($this->input->post('password')));
        $query = $this->db->get('users');

        if($query->num_rows == 1) {
            return true;
        }
    }

    function create_member() {
        $email = $this->input->post('email');

        $new_user = array(
            'email' => $this->input->post('email'),
            'name' => $this->input->post('name'),
            'password' => md5($this->input->post('password'))
        );

        $insert = $this->db->insert('users', $new_user);
        return $insert;
    }

    function check_email_exists($email) {
        $this->db->where('email', $email);
        $result = $this->db->get('users');

        if($result->num_rows() > 0) {
            return FALSE; //email taken
        }else{
            return TRUE; //email available
        }
    }

    function getEmails() {

        $query = $this->db->query('SELECT email FROM users'); 

        if($query->num_rows() > 0){
            return $query->result();
        } else{
            return NULL;
        }
    }

    function getUsers() {

        $query = $this->db->query('SELECT * FROM users');

        if($query->num_rows() > 0) {
            return $query->result();
        } else {
            return NULL;
        }
    }
}

查看:

   <body>    
    <!-- Page Content -->
    <div id="page-content-wrapper">
        <div class="container-fluid">
            <div class="row">
                <div class="col-lg-12">
                    <div id="login_form">

                        <?php if(isset($successful_creation)) { ?>
                            <h3><?php echo $successful_creation; ?></h3>
                        <?php } else { ?>
                            <h1><i class="fa fa-user fa-fw fa-lg"></i>Login</h1>
                        <?php } ?>

                        <?php
                        echo form_open('welcome/validate_credentials');
                        echo form_input('email', '', 'placeholder="Email"');
                        echo form_password('password', '', 'placeholder="Password" class="password"');
                        echo form_submit('submit', 'Login');
                        echo anchor('signup', 'Create Account');
                        echo form_close();
                        ?>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <!-- /#page-content-wrapper -->
</div>
<!-- /#wrapper -->

当我在登录页面上点击登录时,我总是被重定向到About_Us页面,我放在那里只是为了测试登录是否正常。我忽略了我的代码有什么问题吗?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

在您的模型中更新validate()方法,请使用$query->num_rows()代替$query->num_rows。它应该是这样的:

if($query->num_rows() == 1) {
    return true;
}