[英]PHP login using CodeIgniter
我正在嘗試使用CodeIgniter在PHP上登錄。
我的代碼是這樣的:
登錄視圖
<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>
不要介意正確的div,該代碼仍未編碼。
我的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;
}
}
}
當我運行它時,會出現此錯誤:
遇到PHP錯誤
嚴重程度:注意
消息:未定義的屬性:VerificarLogin :: $ Form_validation
文件名:controllers / verificarlogin.php
行號:32
錯誤標記的行是這樣的:
$this->Form_validation->set_rules('username', 'Username', 'trim|required|xss_clean');
我已重新研究,發現錯誤是由於缺少此行引起的
$this->load->library('Form_validation');
但是這行已經在我的代碼中了...
庫數據庫和會話通過自動加載來加載。
我不知道我做錯了什么...就像代碼無法訪問庫...
如果您查找文檔 ,則可以看到它們的示例:
<?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');
}
}
}
?>
並且它們執行$this->form_validation
而不是$this->Form_validation
因此請嘗試更改要訪問的屬性的名稱。
加載庫$this->load->library('form_validation');
時,還要嘗試修復名稱$this->load->library('form_validation');
函數check_database
不加載Form validation
。 嘗試$this->load->library('form_validation')
下行$this->load->library('form_validation')
移至控制器構造函數:
function __construct()
{
parent::__construct();
$this->load->model('usuarios','',TRUE);
$this->load->library('form_validation');
}
我假設您的工作文件夾名稱是Project
將.htaccess文件添加到
RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots|favicon.ico|\.txt|\.html)
RewriteRule ^(.*)$ /Project/index.php?/$1 [L]
在您的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
}
}
在您看來
<form method="post" name="users" action="<?php echo base_url ();?>VerificarLogin /userlogin">
在您的代碼中實際上沒有問題,但是在拼寫方面。
將Form_validation更改為form_validation。 我希望這是您的問題的答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.