我正在尝试使用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;
}
}
}
?>
答案 0 :(得分:1)
我终于找到了解决方案。 apache模块重写需要处于活动状态,但事实并非如此。
答案 1 :(得分:0)
我认为你不会让codeigniter首先抓住你的密码,因为你错过了一个帮助导入(我认为这会抛出某种错误,所以检查你的日志)
此外,您可以在 autoload.php 配置
中加载此帮助器在验证控制器中使用此功能
$this->load->helper(array('form', 'url'));
所有文档都假设相同的控制器和函数用于验证(只要你不编写20行代码来处理事物并分离成离散的功能部分,这就很有意义了。 )