Codeigniter 3.x使用表单验证登录-Boiler plate

时间:2017-03-29 05:15:29

标签: php codeigniter login codeigniter-3

我一直在阅读来自不同新手的关于在codeigniter中登录和验证的几个问题,有些问题混合了JavaScript和J-query。 Codeigniter本身提供了强大的表单验证以及自定义错误设置支持。我已经决定与您分享使用我创建的登录样板文件在codeigniter中启动kickstart的最简单方法,我将与您分享。它有

控制器 登录

模型:Login_model

观看次数:登录并成功

基本配置

1 个答案:

答案 0 :(得分:1)

<强>步骤1

Official Website

下载Codeigniter 3.x.

<强>步骤-2

在localhost根目录下的文件夹中解压缩。 (xampp中的htdocs和wamp中的www)

<强>步骤3。构造

打开已解压缩codeigniter的文件夹 应用程序 - &GT; config-&GT; autoload.php。转到第55行并自动加载这两个库

$autoload['libraries'] = array('database', 'session');

转到第67行并加载两个助手

$autoload['helper'] = array('url', 'file');

保存文件,然后转到应用程序 - &gt; config-&gt; config.php

将第19行的基本网址设为

$config['base_url'] = 'http://'.$_SERVER['SERVER_NAME'].'/folder_name/';

在第31行从值中删除index.php并将其更​​改为

$config['index_page'] = '';
第49行

将uri_protocol从AUTO设置为REQUEST_URI

$config['uri_protocol'] = 'REQUEST_URI';
第229行

设置加密密钥

$config['encryption_key'] = '!@#$%^&*()ASDFGHJKL:ZXCVBNM<>QWERTYUIOP';
// I recommend you create a hash and place it here

保存文件

第4步.htaccess

在codeigniter安装文件夹的根目录下创建一个.htaccess文件,然后保存

<IfModule mod_rewrite.c>
 RewriteEngine On
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>

<强>步骤-5。创建数据库

打开你的phpmyadmin或mysql终端创建数据库,在其中创建表用户,可以使用以下查询

CREATE TABLE `users` (
  `id` int(11) NOT NULL,
  `username` varchar(50) NOT NULL,
  `password` varchar(50) NOT NULL,
  `fullname` varchar(50) NOT NULL,
  `status` enum('pending','approved') NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

步骤-6。将数据库连接到Codeigniter

转到application-&gt; config-&gt; database.php。假设它是一个全新的安装,你还没有创建任何环境。转到第52行并将四行更改为

$db['default']['username'] = 'username'; // will be root if you have xampp
$db['default']['password'] = 'password'; // will be empty if you haven't set
$db['default']['database'] = 'your_database_name';
$db['default']['dbdriver'] = 'mysqli'; // changed from mysql to mysqli

<强>步骤-7。视图

enter image description here

Source Code

<强>步骤-8。控制器

class Login extends CI_Controller {
function __construct()
{
    parent::__construct();
    $this->load->model('Login_model');
    $this->load->library('form_validation');
}

public function index()
{
    if($this->isLoggedin()){ redirect(base_url().'login/dashboard');}
    $data['title']='Login Boiler Plate';
    if($_POST)
    {
        $config=array(
            array(
                'field' => 'username',
                'label' => 'Username',
                'rules' => 'trim|required'
            ),
            array(
                'field' => 'password',
                'label' => 'Password',
                'rules' => 'trim|required'
            )
        );
        $this->form_validation->set_rules($config);
        if ($this->form_validation->run() == false) {
            // if validation has errors, save those errors in variable and send it to view
            $data['errors'] = validation_errors();
            $this->load->view('login',$data);
        } else {
            // if validation passes, check for user credentials from database
            $user = $this->Login_model->checkUser($_POST);
            if ($user) {
            // if an record of user is returned from model, save it in session and send user to dashboard
                $this->session->set_userdata($user);
                redirect(base_url() . 'Login/dashboard');
            } else {
            // if nothing returns from model , show an error
                $data['errors'] = 'Sorry! The credentials you have provided are not correct';
                $this->load->view('login',$data);
            }
        }

    }
    else
    {
        $this->load->view('login',$data);
    }

}
public function change_password()
{
    if($this->isLoggedin()){
        $data['title']='Change Password';
        if($_POST)
        {
            $config=array(
                array(
                    'field' => 'old_password',
                    'label' => 'Old Password',
                    'rules' => 'trim|required|callback_checkPassword'
                ),
                array(
                    'field' => 'password',
                    'label' => 'Password',
                    'rules' => 'trim|required'
                ),
                array(
                    'field' => 'conf_password',
                    'label' => 'Confirm Password',
                    'rules' => 'trim|required|matches[password]'
                )
            );
            $this->form_validation->set_rules($config);
            if ($this->form_validation->run() == false)
            {
                // if validation has errors, save those errors in variable and send it to view
                $data['errors'] = validation_errors();
                $this->load->view('change_password',$data);
            }
            else
            {
                // if validation passes, check for user credentials from database
                $this->Login_model->updatePassword($_POST['password'],$this->session->userdata['id']);
                $this->session->set_flashdata('log_success','Congratulations! Password Changed');
                redirect(base_url() . 'Login/dashboard');
            }

        }
        else
        {
            $this->load->view('change_password',$data);
        }
    }
    else
    {
        redirect(base_url().'Login');
    }

}

public function dashboard()
{
    if($this->isLoggedin())
    {
        $data['title']='Welcome! You are logged in';
        $this->load->view('success',$data);
    }
    else
    {
        redirect(base_url().'Login');
    }
}

public function logout()
{
    $this->session->sess_destroy();
    redirect(base_url().'Login');
}

public function isLoggedin()
{
    if(!empty($this->session->userdata['id']))
    {
        return true;
    }
    else
    {
        return false;
    }
}

}

<强>步骤-8。模型

class Login_model extends CI_Model{
function __construct(){
    parent::__construct();
}

public function checkUser($data)
{
    $st=$this->db->SELECT('*')->from('users')
                    ->WHERE('username',$data['username'])
                    ->WHERE('password',sha1(md5($data['password'])))
                    ->get()->result_array();
    if(count($st)>0)
    {
        return $st[0];
    }
    else
    {
        return false;
    }
}
public function checkPassword($str)
{
    $st=$this->db->SELECT('*')->from('users')
        ->WHERE('id',$this->session->userdata['id'])
        ->WHERE('password',sha1(md5($str)))
        ->get()->result_array();
    if(count($st)>0)
    {
        return true;
    }
    else
    {
        return false;
    }
}

public function updatePassword($password,$id)
{
    $pass=array(
        'password' => sha1(md5($password))
    );
    $this->db->WHERE('id',$id)->update('users',$pass);
}
}

<强>步骤-9。测试

在Phpmyadmin中打开数据库,并使用以下查询将示例数据插入到您的表中

INSERT INTO `users` (`id`, `username`, `password`, `fullname`, `status`) 
VALUES
(1, 'john', '56f5950b728849d0b97c1bccf1691c090ab6734c', 'John Vick', 
'approved');

试验-1 空提交

enter image description here

它将产生错误,我们将其存储在Controller中的错误索引中,如果值存在,则将其传递给视图并在视图中显示它。

测试-2。错误的凭证

提供任何用户名和密码(随机)

enter image description here

测试-3。正确的凭证

  

用户名:john   密码:约翰

enter image description here

Success View Source Code

<强>警报!!

这是启动者的基本代码,还有更多的改进空间,例如Security功能和Encryption

完整源代码

您可以在Boiler-Plates-Codeigniter-3.x-Login

从Git下载完整的源代码