简体   繁体   English

使用CodeIgniter登录PHP

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM