Codeigniter 3.x 使用表单验证登录 - 样板

2023-12-10

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

控制器 Login

Model: 登录_型号

Views: 登录并成功

以及基本配置


Step-1

从以下位置下载 Codeigniter 3.x官方网站

Step-2

解压到本地主机根目录中的文件夹中。 (xampp 中的 htdocs 和 wamp 中的 www)

步骤3。配置

打开您在 go 中解压 codeigniter 的文件夹 应用程序->配置->autoload.php。转到第 55 行并自动加载这两个库

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

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

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

保存文件,然后转到 application->config->config.php

将第 19 行的 Base URL 设置为

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

第 31 行从 value 中删除 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终端创建一个数据库,在其中创建一个表users,你可以使用以下查询

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

转到应用程序->配置->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

源代码

步骤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

它将产生错误,我们将其存储在控制器中的错误索引中,将其传递给视图并在该值存在时将其显示在视图中。

测试-2。凭证错误

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

enter image description here

测试-3。正确的凭证

用户名: 约翰 密码:约翰


enter image description here

成功查看源代码

ALERTS!!

这是入门者的基本代码,还有很多改进空间,例如Security特点和加密

完整的源代码

您可以从 Git 下载完整的源代码:Boiler-Plates-Codeigniter-3.x-登录

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Codeigniter 3.x 使用表单验证登录 - 样板 的相关文章

  • 使用 htaccess 文件重定向[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 Edit 我想重定向一个网址 to www example com location sydney from www example com rss
  • jQuery 不断 ping 以获得 Ajax 响应

    如何使用 jQuery 不断运行 PHP 脚本并每秒获取响应 并将鼠标上的少量数据发送到同一脚本 我真的需要添加一些随机扩展才能让这样一个简单的计时器工作吗 迭代是人类的 递归是神圣的 L 彼得 多伊奇 http www devtopics
  • 将文件附加到 PHPMailer

    我目前正在开发一个项目 该项目将文件作为 blob 存储在数据库中 我需要将文件附加到电子邮件并通过 PHPMailer 发送出去 我熟悉 mail gt addAttachment 但是 这个函数似乎只接受文件路径 而我没有 我想知道是否
  • Laravel 5.3 withCount() 嵌套关系

    模型结构如下 教程 gt hasMany 章节 gt hasMany 视频 我们如何使用 laravel 5 3 的 withCount 方法从教程模型加载视频数量 video count 我努力了 Tutorial withCount c
  • 从 Yii 中的 registerScript 方法强制执行脚本顺序

    我创建了一个小部件 它注册了自己的脚本 如下所示 class MyWidget extends CWidget public function run Yii app gt clientScript gt registerScript CL
  • 为 ASP.NET MVC 实现自定义登录

    我是 ASP NET MVC 的新手 需要一些关于如何实现以下内容的建议 该站点是一个使用率很高的站点 内部 内联网 约有 200 个用户 我们使用表单身份验证来访问 SQL Server DB 不是 Windows 集成 有些操作受到保护
  • 如何在我的查询中使用日期格式?

    这适用于 phpmyadmin 但是当我在代码上使用时给我一个错误 错误说 解析错误 语法错误 意外的 我的语法有什么问题 gt
  • 下一个验证 |当用户对象有太多项目时,会话请求没有数据

    我会尽力为我解释我的问题 我使用 Strapi 作为后端 使用 Nextjs 作为前端 对于身份验证 我使用 NextAuth nextauth js const options providers Providers Credential
  • 查找所有具有相同值的数组键

    当值未知时 是否有一种更简单的方法来获取具有相同值的所有数组键 The problem with array unique是它返回唯一的数组 因此它找不到唯一的值 例如 从这个数组 Array a gt 1000 b gt 1 c gt 1
  • 身份验证后如何退出 Google

    所以我的应用程序可以选择使用 Google 登录 单击 Google 提供的按钮后 将打开一个 Web 视图并让用户输入其凭据 允许应用程序访问其信息后 应用程序将用户登录并将 SignInViewController 更改为 TabBar
  • 带 Expect 的 Telnet 自动化:身份验证速度慢?

    我正在使用 Telnet 向 Mikrotik 路由器发送命令 telnet 192 168 100 100 l admin Password pass1234 admin ZYMMA gt interface pppoe server r
  • 如何复制具有 MySQL 中保留的键和其他结构特征的表?

    如何复制保留键和其他结构特征的表 包括主键 外键和索引 这可以通过单个 MySQL 查询来完成吗 我正在使用 create table newtable as select 但此方法会使所有键和索引丢失 无法使用单个查询来从另一个表复制一个
  • 检查 CodeIgniter 中受影响的行数

    我正在尝试检查我的模型方法是否有任何行受到影响 如果是 则返回 true 否则返回 false 但我不知道如何获取它 class User model extends CI Model function construct parent c
  • 以编程方式添加数字签名外观?

    我正在以编程方式对我的 PDF 文件进行签名 并且我想将签名外观添加到 PDF 我需要哪些对象才能实现此目的 我知道我必须Annotations BBox and XObject但我真的不知道按什么顺序以及是否需要其他东西 调试此类内容以找
  • CodeIgniter MultiDatabse 连接错误

    我在CodeIgniter中看到很多连接多数据库的方法 教程 离我还很遥远 有人提供我在 CI 中连接多个数据库 这是我在博客中找到的使用方式 抱歉 我不认识博客地址 active group default active record T
  • JSON 编码和大引号

    我在 PHP 5 的本机实现中遇到了一个有趣的行为json encode 显然 当将对象序列化为 json 字符串时 编码器将清空包含 卷曲 引号的字符串的任何属性 这种类型可能会在启用自动转换的情况下从 MS Word 文档中复制粘贴 这
  • PHP 插入中的 mysqli_affected_rows

    我有这个代码 if mail to subject message headers insert member sql INSERT INTO members id username VALUES id username insert me
  • 当我在 PHP 中将 print_r() 应用于数组时,为什么会得到“Resource id #4”? [复制]

    这个问题在这里已经有答案了 可能的重复 我如何从 PHP 中的 MySql 响应中 回显 资源 id 6 https stackoverflow com questions 4290108 how do i echo a resource
  • 如何使用 symfony 对管理面板中自己的列进行排序?

    M schema yml News columns title type string 50 category id type integer 4 relations Category local category id foreign c
  • Codeigniter,为MySQL创建表和用户

    我想以编程方式使用 CI 创建数据库和用户 到目前为止 我有这 2 个简单的 MySQL 语句 CREATE DATABASE testdb DEFAULT CHARACTER SET utf8 COLLATE utf8 general c

随机推荐

  • grep 匹配某个模式的行,以及匹配前后的行,直到不同模式

    Start pattern abc d End pattern Start pattern abc d ef ghij klm no End pattern Start pattern abc def hij End pattern Sta
  • 更快(更具可扩展性)的DataSet.Merge?

    我们在应用程序中使用强类型数据集 导入数据时我们使用方便的DataSet Merge 将 DataRows 从一个 DataSet 复制到另一个 DataSet 的操作 StringCollection lines ReadFromFile
  • Git 将修补程序分支合并到功能分支

    假设我们在 Git 中有以下情况 创建的存储库 mkdir GitTest2 cd GitTest2 git init master 中发生一些修改并提交 echo On Master gt file git commit a m Init
  • 使用 Google Apps 脚本删除 Google 文档中的表格行

    我正在尝试使用 Google Apps 脚本使用从电子表格到 Google 的信息来大量创建文档 但我不知道如何使用 Table 类 特别是方法 RemoveRow 我创建了一个示例 不太复杂 来说明我的问题 我有一个名为 销售报告 该文档
  • JavaScript 每次调用函数时都会编译该函数吗?

    假设我有这个功能 function A function B return 1 return 1 B 是否起作用B每次调用函数时都会编译A 我记得有人说不会 但我的记忆力已经生锈了 找不到参考资料 JavaScript 标准规定 JavaS
  • 某些三星设备上的编辑文本有限?

    我正在尝试将长文本从 SD 卡读取到 Android 中的编辑文本中 在几乎所有设备上 除了某些三星设备外 此功能都运行良好 当我尝试读取超过 10kb 的任何内容时 我读取的字符串也会获取整个文件 当我尝试将其添加到编辑文本时 它在 10
  • 如何在脚本内触发大括号扩展?

    我正在编写一个需要使用 shell 的大括号扩展的脚本 但我尝试过的任何方法都不起作用 对于 人为的 实例 假设我有一个包含字符串的变量 thing 01 02 我 显然 想将其扩展到 thing01 thing02 从脚本内部 我该怎么做
  • 为什么删除 DOCTYPE 后高度 100% 仍有效?

    这是整个代码 div style background color green height 100 width 100 div 什么也没有出现 但是如果我删除第一行 doctype 所有页面如预期一样都是绿色的 我有两个问题 我该如何制作
  • UIActivityViewController 相当于 ios 5

    我正在尝试分享应用程序中的一些文本 如果用户安装了ios 6我将调用UIActivityViewController来共享 但是 如果用户有 ios 5 是否有类似的东西我可以调用 并且有按钮可以分享到邮件和 Twitter 在 ios 5
  • 什么时候需要在Python中的整数两边添加引号[重复]

    这个问题在这里已经有答案了 我刚刚了解到Python中没有整数的引号 但为什么在这种情况下需要它 character name Tom age 50 print There once was a man named character na
  • API 平台 JWT:找不到“GET /api/login”的路由

    我成功安装了 API 平台 它与我的所有实体配合良好 现在我正在尝试使用 LexikJWTAuthenticationBundle 添加 JWT 身份验证 但是当我发送登录请求时 我得到 找不到 GET api login 的路由 我的请求
  • 如何使用JS传播剩余破坏来删除嵌套属性?

    尝试使用扩展运算符剩余破坏来删除多个属性 因此药物名称被删除 但我有嵌套对象mailPrice copayEmployer那并没有被破坏 你知道什么是错误实施的吗 main js const transformedResponse tran
  • 成员函数指针和继承

    因此 为了方便起见 我正在开发一个简单的 win32 包装器 但我遇到了一个稍微复杂的问题 这还有很多其他成员 但我省略了一些 只留下有问题的成员 class Windows AbstractWindow public void Insta
  • WCF ServiceRoute 路由前缀可以包含路径值吗?

    目前我使用这个 RouteTable Routes Add new ServiceRoute API new WebServiceHostFactory typeof MySite Web MyServiceV1 使此 url 指向 MyS
  • 如何在 Pytz 中使用缩写时区名称(PST、IST)

    我需要知道如何在 pytz 上使用缩写时区名称 如 PST IST 等 的方法 现在我可以使用时区名称 例如 America Los Angeles 在时区之间进行转换 相反 我需要找到使用时区名称 如 PST IST 等 的方法 我现在用
  • GitHub Actions 中的环境和可重用工作流程

    我想找到一种方法将环境 语句从可重用工作流程移动到调用工作流程 可重用工作流程的开始是 name Reusable Terraform Action on workflow call inputs working folder descri
  • 从 javascript 提交名称值对?

    JS 可以通过 document testform submit 提交 name vale 对吗 或者是否必须通过 html 标签提交 例如
  • 如何在 Primefaces Gmap 上标记用户当前位置?

    在 Gmap 中 我们可以通过传递自定义纬度和经度来标记所需位置 有什么方法可以为用户的当前位置添加标记到地图上吗 有没有办法获取用户的纬度和经度 以前有人做过吗 请分享你的想法 您需要计算用户的 IP 地址 然后将其提供给某些 IP 地理
  • Ray 并行 python 不会改变列表

    我的问题是 如果我重新分配列表中的项目 以便重新分配发生在并行进程期间 那么在并行进程完成后 更改将恢复到其原始状态 在下面的示例中 为了便于理解而进行了极大简化 我有一个函数将列表元素 NoZeros 0 更改为 鸡 第二个函数将 NoZ
  • Codeigniter 3.x 使用表单验证登录 - 样板

    我在这里阅读了来自不同新手的几个关于 Codeigniter 中的登录和验证的问题 其中一些混合了 JavaScript 和 J query Codeigniter 本身提供了强大的表单验证以及自定义错误设置支持 我决定与您分享使用我创建的