Codeigniter:以admin用户身份登录,以员工用户身份登录

时间:2015-12-31 06:29:06

标签: javascript php mysql codeigniter

您好,我目前正在处理codeigniter framework,我目前正在开展一个基本上是管理员/员工登录系统的项目。

目前,我已经能够创建登录表单,并且在检查用户存在后可以成功地让用户登录。

我只想指出正确的方向,以便我能够将员工用户登录到员工页面,将管理员用户登录到管理页面。

这就是我目前所拥有的,它使用bootstrap作为前端框架完全正常运行。但允许任何用户登录。

顺便说一下,我只有一个表名"员工"它仅包含来自mysql数据库的员工用户和管理员用户。

以下是视图:(login.php)

<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  <meta name="viewport" content="width=1,initial-scale=1,user-scalable=1" />
  <title> Login Form </title>

  <link href="http://fonts.googleapis.com/css?family=Lato:100italic,100,300italic,300,400italic,400,700italic,700,900italic,900" rel="stylesheet" type="text/css">
  <link rel="stylesheet" type="text/css" href="<?php echo base_url()?>assets/css/bootstrap.min.css" />
  <link rel="stylesheet" type="text/css" href="<?php echo base_url()?>assets/css/styles.css" />
  <script src="<?php echo base_url()?>assets/js/bootstrap.min.js"></script>

  <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
  <!--[if lt IE 9]>
  <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
  <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
  <![endif]-->
</head>
<body>

<script>
$(document).ready(function () {
  var elements = document.getElementsByTagName("INPUT");
  for (var i = 0; i < elements.length; i++) {
    elements[i].oninvalid = function (e) {
      e.target.setCustomValidity("");
      if (!e.target.validity.valid) {
        switch (e.srcElement.id) {
          case "username":
          e.target.setCustomValidity("Username cannot be blank");
          break;
          case "pass":
          e.target.setCustomValidity("Password cannot be blank");
          break;
        }
      }
    };
    elements[i].oninput = function (e) {
      e.target.setCustomValidity("");
    };
  }
})
</script>

<style type="text/css">
.back{
  position: absolute;
  bottom: 0px;
  left: 0px;
}
</style>

<section class="container">
      <section class="login-form">
    <form class="form-signin" action="goClock" method="post" role="login">
               <img src="<?php echo base_url()?>assets/images/easypay.png" class="img-responsive center-block" alt="" />
        <input type="text" class="form-control input-lg" placeholder="username" name='user' required id="username" autocomplete="off" autofocus  />
        <input type="password" class="form-control input-lg" placeholder="Password" name='password' required id="pass" required />
       <?php

            if(!empty($login_error)) {
              echo $login_error;
            }

       ?>  
            <button name='login' class="btn btn-lg btn-block btn-primary" value=" LOGIN " type="submit" id="button2">Login</button>  
</form>
        <p class="text-center" style="font-weight: bold; font-size: 60;" id="demo"></p>

            <script>
            var myVar = setInterval(myTimer, 1000);

            function myTimer() {
              var d = new Date();
              document.getElementById("demo").innerHTML = d.toLocaleTimeString();
            }
            </script>
</section>
</section>
<div class="back">
  <input class="btn btn-warning" action="action" type="button" value="<- Back" onclick="location.href = 'index';" />
</div>
</body>
</html>

这是控制器:(home.php)

   public function goClock($message = null) {
            $this->load->view('imports/header');
            $this->load->view('imports/menu');

            if (!is_null($this->input->post('login'))) {
                $username = $this->input->post('user');
                $password = $this->input->post('password');

                $userdata = $this->model_home->get_userinfo($username, $password);

                $_SESSION['is_loggedin'] = true;  

                if ($userdata !== false) {
                    $this->session->set_userdata($userdata);
                    redirect('home/goHome');
                }else {
                    $data['login_error'] = '<p style="font-size: 16px; color: red;" align="center">Invalid Username or Password</p>';
                    $this->load->view('login', $data);
                }
            }else {
                $data['username'] = $this->input->post('user');
                $data['password'] = $this->input->post('password');
                $this->load->view('clock', $data);
            }
        }

最后这里是模型:(model_home.php)

public function get_userinfo($username = null, $password = null) {
        if ($username && $password) {
            $this->db->select('username, password, empnum');
            $this->db->where('username', $username);
            $this->db->where('password', $password);
            $query = $this->db->get('employees');
            if ($query->num_rows()) {
                return $query->result_array()[0];
            }
        }

        return false;
    }

只是为了澄清我只有一个控制器,默认情况下我的主控制器是home.php。总之,我的目标是能够将管理员用户重定向到admin.php,并能够将员工用户重定向到employee.php(尚未创建Hasn)。

P.S我在PhpMyAdmin的表格中已经有一个名为&#34;员工&#34;。

请帮帮我。提前谢谢。

2 个答案:

答案 0 :(得分:1)

您应该在数据库中添加一个名为user_type的额外列,并为此设置默认值= 0,并为“admin”将其设置为1。 现在修改您的查询:

if ($username && $password) {
            $this->db->select('username, password, empnum,user_type');
            $this->db->where('username', $username);
            $this->db->where('password', $password);
            $query = $this->db->get('employees');
            if ($query->num_rows()) {
                return $query->result_array()[0];
            }
        }

现在检查具有user_type密钥的$ userdata []数组值,如果它是1则

$this->load->view('admin', $data);

否则他是user_type = 0,这意味着员工     $ this-&gt; load-&gt; view('employee',$ data);

注意:我可以提供方法,但您必须根据需要修改数组键和视图名称。

答案 1 :(得分:0)

首先在数据库usertype表中创建名为employees的字段。

在phpMyadmin数据库中运行此查询

  ALTER TABLE `employees` ADD `usertype` ENUM('user','employee') NOT NULL DEFAULT 'user' ;

并在Model

上添加以下代码
 public function get_userinfo($username = null, $password = null) {
    if ($username && $password) {
        $this->db->select('username, password, empnum,usertype');
        $this->db->where('username', $username);
        $this->db->where('password', $password);
        $query = $this->db->get('employees');
        if ($query->num_rows()) {
            return $query->row();
        }
    }

    return false;
}

在您的控制器上

public function goClock($message = null) {
        $this->load->view('imports/header');
        $this->load->view('imports/menu');

        if (!is_null($this->input->post('login'))) {
            $username = $this->input->post('user');
            $password = $this->input->post('password');

            $userdata = $this->model_home->get_userinfo($username, $password);

            $_SESSION['is_loggedin'] = true;  

            if ($userdata !== false) {
               if($userdata->usertype=='user'){ # if user then redirect to user page

                  redirect('home/goHome');
               }else{
                  # If employee redirect to admin page
               }
            }else {
                $data['login_error'] = '<p style="font-size: 16px; color: red;" align="center">Invalid Username or Password</p>';
                $this->load->view('login', $data);
            }
        }else {
            $data['username'] = $this->input->post('user');
            $data['password'] = $this->input->post('password');
            $this->load->view('clock', $data);
        }
    }