您好,我目前正在处理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;。
请帮帮我。提前谢谢。
答案 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);
}
}