2016-06-07 6 views
0

Я новичок в CodeIgniter, и я попытался создать систему входа на моем сайте. Когда я пытаюсь войти на страницу Обзор, он отправляет меня на страницу входа, но после того, как я установил правильный адрес электронной почты и пароль, ничего не происходит.сеанс входа в CodeIgniter

login.php - Контроллер

<?php if (! defined('BASEPATH')) exit('No direct script access 
allowed'); 
    class Login extends CI_Controller { 
     function __construct() 
     { 
     parent::__construct(); 
     } 

     function index() 
     { 
     $this->load->helper(array('form')); 
     $this->load->view('login'); 
     } 

    } 
    ?> 

Overview.php - Контроллер

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

class Overview extends CI_Controller { 

function __construct() 
{ 
    parent::__construct(); 
} 

function index() 
{ 
    if($this->session->userdata('logged_in')) 
    { 
    $session_data = $this->session->userdata('logged_in'); 
    $data['username'] = $session_data['username']; 
    $this->load->view('overview', $data); 
    } 
    else 
    { 
    //If no session, redirect to login page 
    redirect('login', 'refresh'); 
    } 
} 

function logout() 
{ 
    $this->session->unset_userdata('logged_in'); 
    session_destroy(); 
    redirect('home', 'refresh'); 
} 

} 

?> 

VerifyLogin.php - Контроллер

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

class VerifyLogin extends CI_Controller { 

function __construct() 
{ 
    parent::__construct(); 
    $this->load->model('user','',TRUE); 
} 

function index() 
{ 
    //This method will have the credentials validation 
    $this->load->library('form_validation'); 

    $this->form_validation->set_rules('email', 'E-mail', 'trim|required|xss_clean'); 
    $this->form_validation->set_rules('password', 'Password', 'trim|required|xss_clean|callback_check_database'); 

    if($this->form_validation->run() == FALSE) 
    { 
    //Field validation failed. User redirected to login page 
    $this->load->view('login'); 
    } 
    else 
    { 
    //Go to private area 
    redirect('home', 'refresh'); 
    } 

} 

function check_database($password) 
{ 
    //Field validation succeeded. Validate against database 
    $username = $this->input->post('username'); 

    //query the database 
    $result = $this->user->login($username, $password); 

    if($result) 
    { 
    $sess_array = array(); 
    foreach($result as $row) 
    { 
     $sess_array = array(
     'id' => $row->id, 
     'username' => $row->username 
     ); 
     $this->session->set_userdata('logged_in', $sess_array); 
    } 
    return TRUE; 
    } 
    else 
    { 
    $this->form_validation->set_message('check_database', 'Invalid username or password'); 
    return false; 
    } 
} 
} 
?> 

login.php - вид

<div class="container"> 
<div class="row"> 
<div class="col-md-4 col-md-offset-4 well"> 
<form role="form" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" name="loginform"> 
<fieldset> 
<legend>Login</legend> 
<div class="form-group"> 
<label for="name">Email</label> 
<input type="text" name="email" placeholder="Your Email" required class="form-control" /> 
</div> 

<div class="form-group"> 
<label for="name">Password</label> 
<input type="password" name="password" placeholder="Your Password" required class="form-control" />  
</div> 

<div class="form-group"> 
<input type="submit" name="login" value="Login" class="btn btn-primary" /> 
</div> 
</fieldset> 
</form> 
<span class="text-danger"><?php if (isset($errormsg)) { echo $errormsg; } ?></span> 
</div> 
</div> 

спасибо и я надеюсь, что somene даст мне решение.

+0

Поскольку ваша ссылка действия в форме хранит публикацию в методе 'index()' в контроллере 'Login', который отображает только регистрационную форму. Ссылка на действие должна быть отправлена ​​на контроллер VerifyLogin. – TheDrot

+0

Ваш контроллер VerifyLogin.php должен иметь только верхний регистр первой буквы Verifylogin.php и 'class Verifylogin extends CI_Controller {' – user4419336

+0

@ wolfgang1983 Я изменил его, и он делает то же самое. – funkyz0r

ответ

0

Когда вы вводите страницу входа, действие будет «Login.php» из-за $_SERVER['PHP_SELF'].

<form role="form" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" name="loginform"> 

в $ _SERVER [ «PHP_SELF»] супер глобальная переменная, которая возвращает имя файла в данный момент скрипта.

Вы должны изменить действие на VerifyLogin, поэтому, когда вы отправляете форму, метод index() в Verifylogin.php будет выполняться. не

<form role="form" action="VerifyLogin" method="post" name="loginform"> 

xss_clean больше не является частью проверки формы, чтобы удалить его. Очистка XSS должна использоваться на выходе без ввода.

$this->form_validation->set_rules('email', 'E-mail', 'trim|required'); 
$this->form_validation->set_rules('password', 'Password', 'trim|required|callback_check_database'); 
+0

Спасибо @TheDrot, все сработало, но оно перенаправляет меня на страницу входа без ошибок на странице Обзор. Я думаю, что перенаправление является проблемой .. – funkyz0r

+0

@ funkyz0r Так измените 'redirect ('home', 'refresh');' to 'redirect ('overview', 'refresh');' где вам нужно перенаправить на страницу Обзор. – TheDrot

+0

Я изменил это и ничего .. это сводит меня с ума – funkyz0r