Hi Geeks,
I am showing you “complete login system in codeigniter php”. In this example i’ll show you a simple login example with srored procedure in codeigniter framework.
Step 1. Install Codeigniter and configure database.php in application/config folder
Step2. create a table in your databse by following sql statement
--create table staement--
CREATE TABLE IF NOT EXISTS `webadmin` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`email` varchar(255) NOT NULL,
`password` varchar(255) NOT NULL,
`website` varchar(255) NOT NULL,
`is_active` int(11) NOT NULL DEFAULT '0',
`is_delete` int(11) NOT NULL DEFAULT '0',
`added_date` datetime NOT NULL,
`modified_date` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
`address` varchar(255) NOT NULL,
`admin_ip` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=17 ;
--
-- Dumping data for table `webadmin`
--
INSERT INTO `webadmin` (`id`, `name`, `email`, `password`, `website`, `is_active`, `is_delete`, `added_date`, `modified_date`, `address`, `admin_ip`) VALUES
(1, 'Jeetendra', '[email protected]', 'e10adc3949ba59abbe56e057f20f883e', 'https://www.w3school.info', 1, 0, '2015-11-18 08:24:49', '2015-11-18 11:58:01', 'JAIPUR', '192.256.1.1');
Note : By default in sql dump we have following login details set
Login Credentials:
email : [email protected]
password:123456
//in sql dump file password saved in md5 encryted.
Step 3.Now Create a Procedure named LOGIN_AUTH by executing following sql statement in phpmyadmin by select your db and in sql execute area.
CREATE PROCEDURE `LOGIN_AUTH`(IN `_email` VARCHAR(255) CHARSET utf8, IN `_password` VARCHAR(255) CHARSET utf8) NOT DETERMINISTIC NO SQL SQL SECURITY DEFINER SELECT * FROM `webadmin` WHERE (`is_active`='1' and `is_delete`='0') and ( `email`= _email and `password` = _password )
In this satement we have created a stored procedure which accepts 2 parameters varchar email and password, and in procedure body there is a select match sql statement that verify that user is having details or exists with these details.
Step 4. Create a Model named “Common_model.php” in your model folder by putting following code.
<?php
class Common_Model extends CI_Model {
function __construct()
{
parent::__construct();
}
function exec_proc($proc_name,$data=array(),$only_exec=0)
{
try
{
$this->db->reconnect();
$sql = "CALL `".$proc_name."`";
$indexes=array();
foreach($data as $c)
{
$indexes[]="?";
}
if(count($indexes)>0)
$sql.= "(".implode(",",$indexes).")";
else
$sql.= "()";
$result = $this->db->query($sql,$data);
if($only_exec==0)
$ret = $result->result_array();
else
$ret = $result;
$this->db->close();
}
catch (Exception $e)
{
echo $e->getMessage();
}
return $ret;
}
}
?>
Note : Make home controller as default controller in application/config/routes.php
$route['default_controller'] = 'home';
Step 5. Now create a Controller named “Home.php” controller in you Controller folder with following code.
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Home extends CI_Controller {
public $load_view;
public $data;
public function __construct()
{
parent::__construct();
$this->load->database();
$this->load->helper('url');
$this->load->model('Common_model');
}
public function index()
{
$this->check_alreadylogin();//send to dashboard if session data is exist or user is already logged in or logged information is saved in session.
$this->load->library('form_validation');
$config = array(
array(
'field' => 'user_username',
'label' => 'Email',
'rules' => 'trim|required|valid_email'
),
array(
'field' => 'user_password',
'label' => 'Password',
'rules' => 'trim|required'
)
);
$this->form_validation->set_rules($config);
if($this->form_validation->run() == FALSE)
{
$this->data['page_title']="Login Controller";
$this->load->view('login');
}else{
$username = trim($this->input->post('user_username'));
$password = md5(trim($this->input->post('user_password')));
$data[0]=$username;
$data[1]=$password;
$this->_authenticate($data);
}
}
public function _authenticate($data)
{
$retRes=$this->Common_model->exec_proc("LOGIN_AUTH",$data);
if(!empty($retRes)){
$this->session->set_userdata('webadmin_session',$retRes[0]);
$this->webadmin_session = $this->session->userdata('webadmin_session');
redirect('/dashboard');
}else{
$this->session->set_flashdata('fail_msg','You don\'t have permission to access this Admin panel.');
redirect('/');
}
}
public function checklogin()
{
$is_login=$this->session->userdata('webadmin_session');
if(!isset($is_login['id']) || $is_login['id'] == 0 || $is_login['id'] == "" )
{
$this->session->unset_userdata('webadmin_session');
redirect('/');
}
}
public function check_alreadylogin()
{
$already_login=$this->session->userdata('webadmin_session');
if(isset($already_login['id']) && $already_login['id'] > 0)
{
redirect('/dashboard');
}
}
public function dashboard()
{
$this->checklogin(); //use to logged out if use is not logged in or session has been out
$UserData=$this->session->userdata('webadmin_session'); //retrieve user data from session
$this->data['logged_username']=$UserData['name']; //assign the user name to the view for showing welcome username
$this->load->view('dashboard');
}
public function logout()
{
$this->session->unset_userdata('webadmin_session');
redirect('/');
}
}
?>
In this Controller index function we create a login logic and called the model’s procedure execution function where we passes 2nd parameter as a data in array form with email and password respectively indexes.
Now model picks the data array and set a order and prepare a stored procedure statement to execute.
First parameter is procedure name,second is a order data array required by procedure, and third parameter if we require a data to be return by model then we have to pass third parameter with value 1 .
Note: third parameter is optional. by default it doesn’t return any data it just receive 0 in third parameter by default.
Step 6. Now we have create a View for loading the Login form with name “login.php”
<h2>Login to your account</h2>
<form class="form-horizontal" method="post">
<?php
if($this->session->flashdata('fail_msg')!="")
{
echo '<p style="colr:red;">';
echo $this->session->flashdata('fail_msg');
echo '</p>';
}
?>
<fieldset>
<div class="input-prepend" title="Username">
<span class="add-on"><i class="halflings-icon user"></i></span>
<input class="input-large span10" name="user_username" value="<?php echo set_value('user_username'); ?>" id="user_username" type="email" placeholder="type email"/>
<?php echo form_error('user_username','<p class="alert alert-error">','</p>'); ?>
</div>
<div class="clearfix"></div>
<div class="input-prepend" title="Password">
<span class="add-on"><i class="halflings-icon lock"></i></span>
<input class="input-large span10" name="user_password" value="<?php echo set_value('user_password'); ?>" id="user_password" type="password" placeholder="type password"/>
<?php echo form_error('user_password','<p class="alert alert-error">','</p>'); ?>
</div>
<div class="clearfix"></div>
<input type="submit" value="Login" name="login_button" />
<div class="clearfix"></div>
</fieldset>
</form>
Step 7. create Dashboard View in views folder named dashboard.php with following code
<table>
<tr>
<td>Welcome <?php echo $logged_username; ?></td><td><a href="<?php echo $this->config->base_url(); ?>index/logout">LOGOUT</a></td>
</tr>
<tr>
<td colspan="2">Now you are logged are in and this is dashboard view </td>
</tr>
<tr>
<td colspan="2">You cannot directly inter in this area,want to try on unlogged session ? just copy the current url from url bar and logout out by clicking on log out link in top. </td>
</tr><tr>
<td colspan="2">Now Paste the url in browser again it will automatic redirect to login form. </td>
</tr>
</table>
If you Want Seo friendly Url or Remove index.php from the codeigniter url then Read following article.
https://www.w3school.info/2015/10/20/how-to-remove-index-php-from-codeigniter-url/