Php Codeigniter 3.x登录并进行表单验证-锅炉板
我一直在阅读来自不同新手的关于codeigniter中登录和验证的几个问题,有些问题混合了JavaScript和J-query。Codeigniter本身提供了强大的表单验证和自定义错误设置支持。我决定与您分享我创建的codeigniter和登录样板的最简单启动方法,并与您分享。它有 控制器 登录 型号:登录\u型号 视图:登录并成功Php Codeigniter 3.x登录并进行表单验证-锅炉板,php,codeigniter,login,codeigniter-3,Php,Codeigniter,Login,Codeigniter 3,我一直在阅读来自不同新手的关于codeigniter中登录和验证的几个问题,有些问题混合了JavaScript和J-query。Codeigniter本身提供了强大的表单验证和自定义错误设置支持。我决定与您分享我创建的codeigniter和登录样板的最简单启动方法,并与您分享。它有 控制器 登录 型号:登录\u型号 视图:登录并成功 和基本配置步骤1 从下载Codeigniter 3.x 步骤2 在本地主机根目录中的文件夹中提取。(xampp中的htdocs和wamp中的www) 步骤3。配置
和基本配置步骤1 从下载Codeigniter 3.x 步骤2 在本地主机根目录中的文件夹中提取。(xampp中的htdocs和wamp中的www) 步骤3。配置 在“转到”中打开已提取codeigniter的文件夹 应用程序->配置->自动加载.php。转到第55行并自动加载这两个库
$autoload['libraries'] = array('database', 'session');
转到第67行,加载两个助手
$autoload['helper'] = array('url', 'file');
保存文件,现在进入应用程序->配置->config.php
将第19行的基本URL设置为
$config['base_url'] = 'http://'.$_SERVER['SERVER_NAME'].'/folder_name/';
在第31行,从value中删除index.php并将其更改为
$config['index_page'] = '';
第49行将uri_协议从自动设置为请求uri
$config['uri_protocol'] = 'REQUEST_URI';
在第229行设置加密密钥
$config['encryption_key'] = '!@#$%^&*()ASDFGHJKL:ZXCVBNM<>QWERTYUIOP';
// I recommend you create a hash and place it here
第6步。将数据库连接到Codeigniter
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;
}
}
}
转到应用程序->配置->数据库.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步。视图
第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中打开数据库,并使用以下查询将示例数据插入到表中
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;
INSERT INTO `users` (`id`, `username`, `password`, `fullname`, `status`)
VALUES
(1, 'john', '56f5950b728849d0b97c1bccf1691c090ab6734c', 'John Vick',
'approved');
测试-1
空提交
它将产生错误,我们将其存储在控制器中的错误索引中,将其传递给视图并在视图中显示(如果该值存在) 测试-2。错误的凭证 提供任何用户名和密码(随机) 测试-3。正确的凭证 用户名:约翰 密码:约翰
警报强> 这是kick初学者的基本代码,还有很多改进的空间,比如特性和功能 完整的源代码 您可以从Git下载完整的源代码,网址为