CodeIgniter:在登录系统

时间:2015-12-30 16:43:44

标签: php mysql codeigniter google-chrome

我是php的新手。我在使用phpmyadmin的Ubuntu 14.04 LTS上使用LAMP服务器。 我使用在线教程创建了一个登录系统,每当我输入正确的用户名和密码时,谷歌浏览器都会加载一个空白页面(而且Mozilla Firefox没有显示任何活动)。此外,如果输入错误数据,则不会显示错误 请帮助!

我的控制器文件:LoginController.php

<?php

class LoginController extends CI_Controller{

public function index(){

    $this->load->view('login');
}

public function checkLogin(){
    $this->load->library('form_validation');
    $this->form_validation->set_rules('username' , 'Username' , 'required');
    $this->form_validation->set_rules('password' , 'Password' , 'required|callback_verifyUser');

    if($this->form_validation->run() == false){
        $this->load->view('login');

    }else{
        redirect('HomeController/index');
    }

}
public function verifyUser(){
    $name = $this->input->post('username');
    $pass = $this->input->post('password');

    $this->load->model('LoginModel');

    if($this->LoginModel->login($name, $pass)){
        return true;
    }
    else{
        $this->form_validation->set_message('verifyUser', 'Incorrect username or password. Please try again.');
        return false;
    }
}

}

我的第二个控制器:HomeController.php

<?php

class HomeController extends CI_Controller{

public function index(){
    $this->load->view('home');


}

}

我的第一个查看文件:login.php

    <!DOCTYPE HTML>
    <html>
    <head>
        <title>CI Login System</title>
    </head>
    <body>
        <h1>Login</h1>
        <?php echo validation_errors(); ?>
        <?php echo form_open('LoginController/checkLogin'); ?>
        Username<br/>
        <input type="text" name="username" required/><br/>
        Password<br/>
        <input type="password" name="password" required/><br/>
        <input type="submit" value="Login" name="submit"/>
        </form>
    </body>
    </html>

我的第二个视图文件:home.php

    <!DOCTYPE HTML>
    <html>
        <head>
            <title>CI Login System</title>
        </head>
        <body>

        <h1>Welcome User, you have logged in...</h1>

        <a href="#" >Logout</a>

        </body>
    </html>

我的模型文件:LoginModel.php

<?php

class LoginModel extends CI_Model{

public function login($name, $pass){

    $this->db->select('name', 'pass');
    $this->db->from('users');
    $this->db->where('name', $name);
    $this->db->where('pass', $pass);

    $query = $this->db->get();

    if($query->num_rows() == 1){
        return true;
    }else{
        return false;
    }
}

}

1 个答案:

答案 0 :(得分:0)

我在这里添加我的标准登录(它还包括注册,注销ETC。)结构,如果你想要你可以使用它。

在开始之前,自动加载这些库:

form_validationdatabasesession

MY_Controller.php(必须位于applications/core文件夹下。

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
Class Back_Controller extends CI_Controller
{
    function __construct()
    {
        parent::__construct();
        $this -> load -> model('panel/Common_model');

        if(isset($this->session->userdata['logged_in']))
        {
            $this->user_data    = $this->Common_model->user_data();
        }
        else
        {
            $this -> session -> set_flashdata('false', 'Please login!');
            redirect('login', 'refresh');
        }
    }

}

Auth.php(财务主任)

    <?php
if (!defined('BASEPATH')) exit('No direct script access allowed');

/**
 * Auth Class
 *
 * @author  Deniz Birlik | Senior Backend Developer
 */

class Auth extends CI_Controller
{

  public function __construct() // parent constructor
  {
      parent::__construct();
      $this -> load -> model('panel/Auth_model');
  }

  public function index() // login page
  {
      $data['content']  = 'login';
      $this -> load -> view('panel/master', $data);
  }

  public function register() // register page
  {
      $data['content']    = 'register';
      $this -> load -> view('panel/master', $data);
  }

  public function forgot_password() // forgot password page
  {
      $data['content']    = 'forgot_password';
      $this -> load -> view('panel/master', $data);
  }

  public function check_login() // auth checker
  {
      $this->form_validation->set_rules('email', 'E-mail Address', 'required|valid_email|trim');
      $this->form_validation->set_rules('password', 'Password', 'required|trim');
      if($this->form_validation->run() == FALSE)
      {
          $this->index();
      }
      else
      {
          $this->Auth_model->check_login();
      }
  }

  public function register_user() // registers a new user
  {
      $this->form_validation->set_rules('email', 'E-mail Address', 'required|valid_email|trim|is_unique[users.email]');
      $this->form_validation->set_rules('password', 'Password', 'required|trim');
      $this->form_validation->set_rules('name', 'Name & Surname', 'required');
      $this->form_validation->set_rules('mobile', 'Mobile', 'required|exact_length[10]|trim|is_natural|is_unique[users.mobile]');
      if($this->form_validation->run() == FALSE)
      {
          $this->register();
      }
      else
      {
          $this->Auth_model->register_user();
      }
  }

  public function logout() // kill the session and redirect user login page
  {
      $this->Auth_model->logout();
  }
}

Auth_model.php(型号)

<?php if (!defined('BASEPATH')) exit('No direct script access allowed');

/**
 * Auth_model Class
 *
 * @author  Deniz Birlik | Senior Backend Developer
 */

 class Auth_model extends CI_Model
 {
   function check_login()
   {
     $auth  = $this->db->get_where('users', array('email' => $this -> input -> post('email', TRUE), 'password' => sha1($this -> input -> post('password', TRUE))))->num_rows(); // check user is there

     if($auth == '1') // if user is there
     {
       $user_array = $this -> db -> get_where('users', array('email' => $this -> input -> post('email', TRUE), 'password' => sha1($this -> input -> post('password', TRUE))))->row_array();

       if($user_array['auth'] == '3') // if user's account is not confirmed
       {
         $this->session->set_flashdata('info', lang('account_not_activated'));
         redirect('giris'); // redirect to login page with info message
       }
       elseif($user_array['auth'] == '0') // if user's account is deactive
       {
         $this->session->set_flashdata('false', 'Your account is suspended!');
         redirect('login'); // redirect to login page with info message
       }
       else
       {
         $session_array  = array
         (
         'id'         =>  $user_array['id'],
         'auth'       =>  $user_array['auth'],
         'logged_in'  =>  TRUE
         );
         $this->session->set_userdata($session_array); // set session data

         $login_array  = array
         (
          'last_login'    =>  unix_to_human(time(), TRUE, 'eu'),
          'last_ip'       =>  $this->input->ip_address()
         );
         $this->db->where('email', $this->input->post('email', TRUE));
         $this->db->update('users', $login_array); // update users table's lastLoginDate and lastLoginIp fields for logged user

         $this->session->set_flashdata('true',  'Welcome back, strtok($user_array['name'], '!'));
         redirect('home'); // redirect to login page with info message
       }
     }
     else // if user is not there
     {
       $this->session->set_flashdata('false', 'Your login details are incorrect');
       redirect('login'); // redirect to login page with info message
     }
   }


   function register_user()
   {
     if($this->input->post('password', TRUE) == $this->input->post('passwordAgain', TRUE))
     {
       $data  = array
       (
        'email'           =>  $this->input->post('email', TRUE),
        'password'        =>  sha1($this->input->post('password', TRUE)),
        'mobile'          =>  $this->input->post('mobile', TRUE),
        'name'            =>  $this->input->post('name', TRUE),
        'registry_date'   =>  unix_to_human(time(), TRUE, 'eu'),
        'registry_ip'     =>  $this->input->ip_address(),
        'auth'            =>  '2',
        'status'          =>  '3'
       );
       $this->db->insert('users', $data);
       $this->session->set_flashdata('info', 'Registration completed!');
       redirect('login'); // redirect to login page with info message
     }
     else
     {
       $this->session->set_flashdata('false', 'Passwords doesn\'t match!');
       redirect('register'); // redirect to register page with error message
     }
   }

   function logout()
   {
     $this->session->sess_destroy();
     $this->session->set_flashdata('true', 'Please come back again!');
     redirect('login'); // redirect to login page with info message
   }
 }

Common_model.php(型号)

<?php
if (!defined('BASEPATH')) exit('No direct script access allowed');

/**
 * Common_model Class
 *
 * @author  Deniz Birlik | Senior Backend Developer
 */

 class Common_model extends CI_Model
 {
   function user_data()
   {
     $user  = $this->db->get_where('users', array('id' => $this->session->userdata('id')))->row_array();

     $date  = strtotime($user['last_login']);

     $data  = array
     (
      'name'          =>  $user['name'],
      'auth'          =>  $this->db->get_where('titles', array('id' => $user['title']))->row('title'),
      'last_login'    =>  date('H:i', $date),
      'profile_pic'   =>  site_url('uploads/profiles/'.str_replace('.', '_thumb.', $user['profile_picture']))
     );

     return $data;
   }
 }

login.php(查看) - 您应该使用我自己的资源编辑自己的观看次数。

<?php echo form_open('check-login'); ?>
<div class="form-group">
   <div class="input-group">
      <span class="input-group-addon"><i class="fa fa-envelope"></i></span>
      <?php $data = array('name' => 'email', 'placeholder' => 'E-mail Address', 'required' => 'required',  'class' => 'form-control'); echo form_input($data); ?>
   </div>
</div>
<div class="form-group">
   <div class="input-group">
      <span class="input-group-addon"><i class="fa fa-lock"></i></span>
      <?php $data = array('name' => 'password','placeholder' => '******', 'required' => 'required',  'class' => 'form-control'); echo form_password($data); ?>
   </div>
</div>
<div class="form-group no-border margin-top-20">
   <?php $data = array('class' => 'btn btn-success btn-block', 'value' => 'Login', ); echo form_submit($data); ?>
</div>
<div class="form-group no-border">
   <?php $data = array('class' => 'btn btn-warning btn-block'); echo anchor(site_url('register'), '<strong>Signup</strong>', $data); ?>
</div>
<?php echo form_close(); ?>

register.php(查看) - 您应该使用我自己的资产来编辑自己的视图。

  <?php echo form_open('signup'); ?>
<div class="form-group">
   <div class="input-group">
      <span class="input-group-addon"><i class="fa fa-user"></i></span>
      <?php $data = array('name' => 'name', 'placeholder' => 'Name & Surname', 'required' => 'required',  'class' => 'form-control'); echo form_input($data); ?>
   </div>
</div>
<div class="form-group">
   <div class="input-group">
      <span class="input-group-addon"><i class="fa fa-envelope"></i></span>
      <?php $data = array('name' => 'email', 'placeholder' => 'E-mail Address', 'required' => 'required',  'class' => 'form-control'); echo form_input($data); ?>
   </div>
</div>
<div class="form-group">
   <div class="input-group">
      <span class="input-group-addon"><i class="fa fa-lock"></i></span>
      <?php $data = array('name' => 'password','placeholder' => 'Password', 'required' => 'required',  'class' => 'form-control'); echo form_password($data); ?>
   </div>
</div>
<div class="form-group">
   <div class="input-group">
      <span class="input-group-addon"><i class="fa fa-lock"></i></span>
      <?php $data = array('name' => 'passwordAgain','placeholder' => 'Password(Again)', 'required' => 'required',  'class' => 'form-control'); echo form_password($data); ?>
   </div>
</div>
<div class="form-group">
   <div class="input-group">
      <span class="input-group-addon"><i class="fa fa-mobile"></i></span>
      <?php $data = array('name' => 'mobile', 'placeholder' => 'Mobile', 'required' => 'required',  'class' => 'form-control'); echo form_input($data); ?>
   </div>
</div>
<div class="form-group no-border margin-top-20">
   <?php $data = array('class' => 'btn btn-success btn-block', 'value' => 'Submit', ); echo form_submit($data); ?>
</div>
<?php echo form_close(); ?>

routes.php(在applications / config文件夹下)

$route['login']    =   'panel/Auth';
$route['register'] =   'panel/Auth/register';

/* Auth Controller Actions */

$route['check-login']  =   'panel/Auth/check_login';
$route['logout']       =   'panel/Auth/logout';
$route['signup']       =   'panel/Auth/register_user';

/* Control Panel Views */

$route['home']         =   'panel/Home';

最后,数据库结构:

    -- phpMyAdmin SQL Dump
-- version 4.5.3.1
-- http://www.phpmyadmin.net
--
-- Anamakine: localhost
-- Üretim Zamanı: 30 Ara 2015, 17:20:57
-- Sunucu sürümü: 5.5.46-0ubuntu0.14.04.2-log
-- PHP Sürümü: 5.6.16

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";

--
-- Veritabanı: `database_sample`
--

-- --------------------------------------------------------

--
-- Tablo için tablo yapısı `titles`
--

CREATE TABLE `titles` (
  `id` int(22) NOT NULL,
  `title` varchar(155) NOT NULL,
  `status` int(1) NOT NULL DEFAULT '1'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Tablo döküm verisi `titles`
--


-- --------------------------------------------------------

--
-- Tablo için tablo yapısı `users`
--

CREATE TABLE `users` (
  `id` int(11) NOT NULL,
  `email` varchar(144) NOT NULL,
  `password` varchar(40) NOT NULL,
  `name` varchar(255) NOT NULL,
  `mobile` bigint(20) NOT NULL,
  `registry_date` datetime NOT NULL,
  `registry_ip` varchar(15) NOT NULL,
  `last_login` datetime NOT NULL,
  `last_ip` varchar(15) NOT NULL,
  `profile_picture` varchar(155) NOT NULL DEFAULT 'default.png',
  `title` int(2) NOT NULL,
  `auth` int(1) NOT NULL,
  `status` int(1) NOT NULL DEFAULT '1'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Tablo döküm verisi `users`
--

--
-- Dökümü yapılmış tablolar için indeksler
--

--
-- Tablo için indeksler `titles`
--
ALTER TABLE `titles`
  ADD PRIMARY KEY (`id`),
  ADD KEY `status` (`status`);

--
-- Tablo için indeksler `users`
--
ALTER TABLE `users`
  ADD PRIMARY KEY (`id`),
  ADD KEY `email` (`email`),
  ADD KEY `status` (`status`),
  ADD KEY `auth` (`auth`);

--
-- Dökümü yapılmış tablolar için AUTO_INCREMENT değeri
--

--
-- Tablo için AUTO_INCREMENT değeri `titles`
--
ALTER TABLE `titles`
  MODIFY `id` int(22) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2;
--
-- Tablo için AUTO_INCREMENT değeri `users`
--
ALTER TABLE `users`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=4;

如果您有任何疑问,请告诉我。快乐的编码!

相关问题