尝试使用CodeIgniter进行登录

时间:2013-12-15 16:20:06

标签: php codeigniter

我正在尝试使用CodeIgniter进行登录,因为我按照我发现的教程进行了操作,因为我几乎无法知道如何操作。

所以我有一个登录模型,视图和控制器以及一个verifylogin控制器。问题是它始终将表单验证为无效登录,我不知道原因:

登录控制器

<?php if (!defined('BASEPATH')) exit('Acceso no autorizado');

class Login extends CI_Controller
{
    function __construct()
    {
        parent::__construct();
    }

    function index()
    {
        $datos = array(
            'home_name' => $this->config->item('home_name'),
            'root_path' => $this->config->item('root_path')
        );

        $this->load->helper('form');

        // Menú principal
        $this->load->view('menu', $datos);

        // TODO: Put your code here...
        $this->load->view('login', $datos);

        // Cierre html
        $this->load->view('cierre', $datos);
    }
}
?>

登录视图

<div id='content-login'>
    <div class='container'>
        <div id='logo' class='login buscadores'>
            <span class='icon icon-lock'></span>
            <h1>Inicia sesión</h1>
            <p>Accede como usuario a <?php echo $home_name?></p>
        </div>

        <div>
            <div id='buscadores' class='container'>
                <div class='content'>
                    <?php echo validation_errors(); ?>
                    <?php echo form_open('verifylogin');
                        $datos = array(
                                'name' => 'username',
                                'placeholder' => 'Usuario',
                                'class' => 'text',
                                'size' => '25'
                            );
                        echo form_input($datos);

                        $datos = array(
                                'name' => 'password',
                                'placeholder' => 'Contraseña',
                                'class' => 'text',
                                'size' => '25'
                            );
                        echo form_password($datos);

                        $datos = array(
                                    'id' => 'login',
                                    'name' => 'login',
                                    'value' => 'Login',
                                    'class' => 'button cursor'
                                );
                        echo form_submit($datos);
                    ?>
                </div>
            </div>
        </div>  
    </div>
</div>

登录模式

<?php 
class User extends CI_Model
{
    function login($username, $password)
    {
        $this->db->select('id, username, password');
        $this->db->from('users');
        $this->db->where('username', $username);
        $this->db->where('password', MD5($password));
        $this->db->limit(1);

        $query = $this->db->get();

        return ($query->num_rows() == 1) ? $query->result() : false;
    }
}

验证登录控制器

<?php if (!defined('BASEPATH')) exit('Acceso no autorizado');

class VerifyLogin extends CI_Controller
{
    function __construct()
    {
        parent::__construct();
        $this->load->model('user', '', TRUE);
    }

    function index()
    {
        $this->load->library('form_validation');

        $this->form_validation->set_rules('username', 'Usuario', 'trim|required|xss_clean');
        $this->form_validation->set_rules('password', 'Contraseña', 'trim|required|xss_clean|callback_check_database');

        if ($this->form_validation->run() == FALSE)
        {
            /*$datos = array(
                'home_name' => $this->config->item('home_name'),
                'root_path' => $this->config->item('root_path')
            );

            $this->load->helper('form');
            $this->load->view('menu', $datos);
            $this->load->view('login', $datos);
            $this->load->view('cierre', $datos);*/
            echo "error en login"; // IT ALWAYS ENDS UP HERE........
        }
        else
        {   echo "login correcto"; // NEVER HERE
            //redirect('portada', 'refresh');
        }
    }

    function check_database($password)
    {
        $username = $this->input->post('username');

        $result = $this->user->login($username, $password);

        if ($result)
        {
            $sess_array = array();
            foreach($result as $row)
            {
                $sess_array = array(
                    'id' => $row->id,
                    'username' => $row->username
                );
                $this->session->set_userdata('logged_in', $sess_array);
            }
            return true;
        }
        else
        {
            $this->form_validation->set_message('check_database', 'Usuario o contraseña inválidos');
            return false;
        }
    }
}
?>

2 个答案:

答案 0 :(得分:1)

我终于找到了解决方案。 apache模块重写需要处于活动状态,但事实并非如此。

答案 1 :(得分:0)

我认为你不会让codeigniter首先抓住你的密码,因为你错过了一个帮助导入(我认为这会抛出某种错误,所以检查你的日志)

此外,您可以在 autoload.php 配置

中加载此帮助器

在验证控制器中使用此功能

$this->load->helper(array('form', 'url'));

所有文档都假设相同的控制器和函数用于验证(只要你不编写20行代码来处理事物并分离成离散的功能部分,这就很有意义了。 )