我是php的新手。我在Ubuntu 14.04 LTS上使用LAMP服务器和phpmyadmin。我使用在线教程创建了一个登录系统,每当我输入正确的用户名和密码时,谷歌浏览器就会加载一个空白页面(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;
}
}
}
我在这里添加了我的standart登录(它还包括注册、注销等)结构,如果你愿意,你可以使用它。
开始之前,自动加载这些库:
form_validation
、database
、session
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
(在应用程序/配置文件夹下)
$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;
如果你有任何问题,请告诉我。编码快乐!