[英]PHP login using CodeIgniter
I'm trying a login on PHP using CodeIgniter. 我正在尝试使用CodeIgniter在PHP上登录。
My code is this: 我的代码是这样的:
Login view 登录视图
<div class="section section_with_padding" id="usuarios">
<h1>Acceso a Usuarios</h1>
<div class="half left">
<h4>Usuario Existente</h4>
<p>Si posee una cuenta en Garage, introduzca su nombre de usuario y contraseña para acceder.</p>
<div id="login">
<!-- Usado para que muestre los errores de validacion -->
<form method="post" name="users" action="index.php/verificarlogin">
<div class="left">
<label for="username">Nombre de Usuario:</label>
<input name="username" type="text" class="required input_field" id="username" maxlength="30" required/>
</div>
<div class="right">
<label for="password">Contraseña:</label>
<input name="password" type="password" class="validate-email required input_field" id="email" maxlength="30" required/>
</div>
<div class="clear"></div>
<input type="submit" class="submit_btn float_l" name="submit" id="submit" value="Entrar" />
</form>
</div>
</div>
Don't mind the right div, that code is still not coded... 不要介意正确的div,该代码仍未编码。
My verificarlogin (verify login) controller 我的verificarlogin(验证登录)控制器
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class VerificarLogin extends CI_Controller {
function __construct()
{
parent::__construct();
$this->load->model('usuarios','',TRUE);
}
function index()
{
//Este metodo tendra las credenciales de validacion
$this->load->library('Form_validation');
$this->Form_validation->set_rules('username', 'Username', 'trim|required|xss_clean');
$this->Form_validation->set_rules('password', 'Password', 'trim|required|xss_clean|callback_check_database');
if($this->Form_validation->run() == FALSE)
{
//Si la validacion falla, el usuario es redireccionado a la pagina de login
$this->load->view('#usuarios');
}
else
{
//Si la validacion pasa, el usuario es redireccionado a donde deberia ir
redirect('home_usuarios', 'refresh');
}
}
function check_database($password)
{
//Si la validacion de campo es exitosa, valida contra la base de datos
$username = $this->input->post('username');
//Pregunta en la base de datos
$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', 'Nombre de Usuario o Contraseña invalida');
return false;
}
}
}
When I run it it gives this error: 当我运行它时,会出现此错误:
A PHP Error was encountered 遇到PHP错误
Severity: Notice 严重程度:注意
Message: Undefined property: VerificarLogin::$Form_validation 消息:未定义的属性:VerificarLogin :: $ Form_validation
Filename: controllers/verificarlogin.php 文件名:controllers / verificarlogin.php
Line Number: 32 行号:32
The line the error is marking is this: 错误标记的行是这样的:
$this->Form_validation->set_rules('username', 'Username', 'trim|required|xss_clean');
I have reserch and I found that error is caused because the lacks this line 我已重新研究,发现错误是由于缺少此行引起的
$this->load->library('Form_validation');
But this line is already in my code... 但是这行已经在我的代码中了...
The libraries database and session are loaded by autoload. 库数据库和会话通过自动加载来加载。
I don't know whan I'm doing wrong... It's like the code can't access the libraries... 我不知道我做错了什么...就像代码无法访问库...
If you look up the documentation you can see their example: 如果您查找文档 ,则可以看到它们的示例:
<?php
class Form extends CI_Controller {
function index()
{
$this->load->helper(array('form', 'url'));
$this->load->library('form_validation');
if ($this->form_validation->run() == FALSE)
{
$this->load->view('myform');
}
else
{
$this->load->view('formsuccess');
}
}
}
?>
and they do $this->form_validation
and not $this->Form_validation
so try changing the name of the property which you wanna access. 并且它们执行$this->form_validation
而不是$this->Form_validation
因此请尝试更改要访问的属性的名称。
Also try to fix the name when loading the library $this->load->library('form_validation');
加载库$this->load->library('form_validation');
时,还要尝试修复名称$this->load->library('form_validation');
function check_database
doesn't load Form validation
. 函数check_database
不加载Form validation
。 Try to move this line $this->load->library('form_validation')
to controller constructor: 尝试$this->load->library('form_validation')
下行$this->load->library('form_validation')
移至控制器构造函数:
function __construct()
{
parent::__construct();
$this->load->model('usuarios','',TRUE);
$this->load->library('form_validation');
}
I assume your working folder name is Project 我假设您的工作文件夹名称是Project
add .htaccess file to 将.htaccess文件添加到
RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots|favicon.ico|\.txt|\.html)
RewriteRule ^(.*)$ /Project/index.php?/$1 [L]
In your VerificarLogin Controller 在您的VerificarLogin控制器中
class VerificarLogin extends CI_Controller {
public function __construct() {
parent::__construct ();
}
public function index() {
if ($this->session->userdata('logged_in')){
redirect ('/home_usuarios/' ); // where user visit successful login
exit;
}
redirect ( '/VerificarLogin /userlogin' );
}
function userlogin() {
$this->load->model ( 'usuarios', '', TRUE );
$this->load->library ( 'form_validation' );
//write your code here
}
}
In your view 在您看来
<form method="post" name="users" action="<?php echo base_url ();?>VerificarLogin /userlogin">
well actually no problem in your code, but is in SPELLING. 在您的代码中实际上没有问题,但是在拼写方面。
Change Form_validation to form_validation. 将Form_validation更改为form_validation。 I hope it is the answer to your question. 我希望这是您的问题的答案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.