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 使用表单验证登录 - 样板 的相关文章

  • 如何计算数组中相同的值并将其存储到变量中?

    items explode product values is 4 2 4 2 2 4 unique items array unique items gives me 4 2 接下来应该给我 4 3 2 3 并将值的数量存储到变量中的代码
  • php 中的浏览器名称?

    我们如何使用php脚本获取浏览器名称和版本信息 正如 Palantir 所说 另外看看 get browser 函数 您还可以在其中检查浏览器中启用的功能
  • 重置密码 电子邮件

    我是 Laravel 开发新手 目前正在从事小型项目 我想自定义重置密码的电子邮件模板 甚至将其链接到完全不同的模板 对于身份验证脚手架 我使用了php artisan make auth命令 但是 默认重置密码功能使用默认的 Larave
  • laravel 4 登录验证失败

    在 Laravel4 中 我在路由中编写了以下代码 但它总是将我重定向到登录页面 我用谷歌搜索并在堆栈溢出上找到了它 并尝试了所有解决方案但没有成功 我确信这将是一个愚蠢的错误 但请跟踪它 谢谢 Routes Route post logi
  • PHP PDO相关:更新SQL语句未更新数据库内容

    我正在尝试使用准备好的语句来实现更新语句PHP http en wikipedia org wiki PHP脚本 但它似乎没有更新数据库中的记录 我不确定为什么 所以如果您能分享一些见解 我将不胜感激 Code query UPDATE D
  • 从图像创建 PDF 时设置文档名称

    我使用以下代码从 jpg 图像创建 pdf im new Imagick im gt readImage image jpg im gt setImageFormat pdf im gt writeImage images pdf imag
  • 尝试使用 swift mailer、gmail smtp、php 发送邮件

    这是我的代码
  • 如何以最少的查询次数获取帖子列表和关联标签

    我的表格结构如下 标签 更多的是一个类别 id 标签名称 描述 slug POSTS ID 标题 网址 邮戳 id idPost idTag USERS ID 用户名 userSlug VOTES id idPost idUser 每个帖子
  • 使用键模式从 Laravel 4 缓存中删除?

    对于我的包 我们使用 Laravel 缓存 我们创建的每个缓存键都有前缀 所以我们得到mypackage config mypackage md5ofafilename有时我需要刷新我的包创建的所有缓存文件 问题是什么 我只知道缓存键的模式
  • 将记录分成两列

    我的数据库中有一个 学生 表 其中包含大约 5 000 条记录 我想将这些记录显示在two分区 如何在不执行查询两次的情况下做到这一点 仅使用单个查询 显示示例http www freeimagehosting net uploads f1
  • 如何使用 PHP SDK 在 AWS SES 发送的电子邮件中实现 List-Unsubscribe 标头

    我尝试使用 AWS PHP SDK 添加自定义标头 以便可以实现 List unsubscribe 标头 问题是我找不到任何地方如何实现它 我已阅读文档但什么也没有 http docs aws amazon com aws sdk php
  • 覆盖默认标识符生成策略对关联没有影响

    交响乐 2 7 2 学说 ORM 2 4 7 MySQL 5 6 12 PHP 5 5 0 我有一个具有自定义 ID 生成器策略的实体 它工作完美 在某些情况下 我必须使用 手工制作 的 ID 来覆盖此策略 当主实体在没有关联的情况下被刷新
  • Magento - 当我的订单取消或退款时如何运行代码

    如果订单被取消或退款 我的支付模块需要向支付服务发送通知 我假设订单页面 在管理后端 上的 取消 按钮将取消订单 而 贷项通知单 按钮 创建发票后 将退还订单 如何针对这些事件运行我的代码 我尝试在付款方式模型中使用 cancel 方法 但
  • 如何使用 Laravel Eloquent 返回多重关系?

    我有一张桌子叫users 每个用户都有不同的事情 country device computer category 我为上述每一个 事物 创建了一个表格 类似如下 1 United States 2 United Kingdom 3 Aus
  • PHP 中的 MongoDB - 如何将项目插入集合中的数组中?

    这必须很容易 但我似乎无法弄清楚 假设我有一个集合users这是集合中的第一项 id ObjectId 4d8653c027d02a6437bc89ca name Oscar Godson email email protected cdn
  • 显示表中的记录

    我的第一个 PHP 项目遇到了一些麻烦 我试图从 MySQL 数据库 有 3 条记录 获取数据并将其显示在表格中 问题是它似乎只显示记录 2 和 3 它跳过了第 1 条记录 请参阅我的代码并在下面显示 if mysqli connect e
  • 如何使用CSS将背景图像放入选择选项标签中

    我有一个从 json 响应接收的国家 地区下拉列表 并且想要在国家 地区名称旁边添加相应的国家 地区国旗图标 也从 json 响应获取图像 我已经尝试了不同的 jQuery 和 bootstrap 插件 但他们所做的是破坏我以前的选择框样式
  • 如何在 Python 中包含 PHP 脚本?

    我有一个 PHP 脚本 news generator php 当我包含它时 它会抓取一堆新闻项并打印它们 现在 我在我的网站 CGI 中使用 Python 当我使用 PHP 时 我在 新闻 页面上使用了这样的内容 为了简单起见 我删掉了这个
  • PHP - Filter_var 替代方案?

    我构建了一个 php 脚本来输出以表单形式发布的数据 但遇到了问题 网站将运行的服务器运行 PHP 5 1 6 此版本的 PHP 不支持 filter var 我需要知道短期内的替代方案 最好是昨天 但在 Google 或 Stack Ov
  • 自定义 WP 主题时,我应该将导航栏放在“”标签之前还是之后?

    我正在通过制作子主题来自定义 WP 主题 我将 Bootstrap 中的导航栏放入子主题目录中的 header php 文件中 但是 我不确定在哪里放置导航栏代码 我可以把它都放在前面and之后标记成功 例如 无论我选择哪一个 导航栏都显示

随机推荐

  • 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 本身提供了强大的表单验证以及自定义错误设置支持 我决定与您分享使用我创建的