2016-12-10 4 views
0

Я создал регистрационную форму в кодеигниторе, но когда я вхожу в систему с учетными данными пользователя, которые я зарегистрировал в базе данных, он терпит неудачу («Неверное имя пользователя и пароль»). Я пытаюсь решить эту проблему, пожалуйста, помогите мне! Мой контроллер ниже: login.phpНеверное имя пользователя и пароль в codeigniter

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

class login extends CI_Controller 
{ 

public function __construct() 
{ 
     parent::__construct(); 
     $this->load->library('session'); 
     $this->load->helper('form'); 
     $this->load->helper('url'); 
     $this->load->helper('html'); 
     $this->load->database(); 
     $this->load->library('form_validation'); 
     //load the login model 
     $this->load->model('login_model'); 
    } 

    public function index() 
    { 
     //get the posted values 
     $username = $this->input->post("txt_username"); 
     $password = $this->input->post("txt_password"); 

     //set validations 
     $this->form_validation->set_rules("txt_username", "Username"); 
     $this->form_validation->set_rules("txt_password", "Password"); 

     if ($this->form_validation->run() == FALSE) 
     { 
      //validation fails 
      $this->load->view('login_view'); 
     } 
     else 
     { 
      //validation succeeds 
      if ($this->input->post('btn_login') == "Login") 
      { 
       //check if username and password is correct 
       $usr_result = $this->login_model->get_user($username,    
       $password); 
       if ($usr_result > 0) //active user record is present 
       { 
        //set the session variables 
        $sessiondata = array(
          'username' => $username, 
          'loginuser' => TRUE 
        ); 
        $this->session->set_userdata($sessiondata); 
        redirect("index"); 
       } 
       else 
       { 
        $this->session->set_flashdata('msg', '<div class="alert 

      alert-danger text-center">Invalid username and password!</div>'); 
        redirect('login/index'); 
       } 
      } 
      else 
      { 
       redirect('login/index'); 
      } 
      } 
     } 
     }?> 

Моя модель: login_model.php

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

    class login_model extends CI_Model 
    { 
    function __construct() 
    { 
     // Call the Model constructor 
     parent::__construct(); 
    } 

    //get the username & password from tbl_usrs 
    function get_user($usr, $pwd) 
    { 
     $sql = "select * from tbl_users where username = '" . $usr . "' and 
     password = '" . md5($pwd) . "' and status = 'active'"; 
     $query = $this->db->query($sql); 
     //echo $sql; exit; 
     return $query->num_rows(); 

    } 

    }?> 

Мое мнение: login_view.php

<!DOCTYPE html> 
    <html> 
    <head> 
    <meta charset="utf-8"> 
<meta name="viewport" content="width=device-width, initial-scale=1.0"> 
<title>Login Form</title> 
<!--link the bootstrap css file--> 
<link   

href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css"  
rel="stylesheet"> 

    <style type="text/css"> 
    .colbox { 
     margin-left: 0px; 
     margin-right: 0px; 
    } 
    </style> 
    </head> 
    <body> 
    <div class="container" style="margin-top: 100px;"> 
    <div class="row"> 
     <div class="col-lg-6 col-sm-6"> 
      <h1>Welcome!</h1> 
     </div> 
     <div class="col-lg-6 col-sm-6">  
     <ul class="nav nav-pills pull-right" style="margin-top:20px"> 
       <li class="active"><a href="#">Login</a></li> 

      </ul> 
     </div> 
     </div> 
     </div> 
     <hr/> 

    <div class="container"> 
    <div class="row"> 
     <div class="col-lg-4 col-sm-4 well"> 
     <?php 
     $attributes = array("class" => "form-horizontal", "id" => "loginform",  

     "name" => "loginform"); 
     echo form_open("login/index", $attributes);?> 
     <fieldset> 
      <legend>Login</legend> 
      <div class="form-group"> 
      <div class="row colbox"> 
      <div class="col-lg-4 col-sm-4"> 
       <label for="txt_username" class="control- 
      label">Username</label> 
      </div> 
      <div class="col-lg-8 col-sm-8"> 
       <input class="form-control" id="txt_username" 
    name="txt_username" placeholder="Username" type="text" value="<?php echo  
    set_value('txt_username'); ?>" /> 
       <span class="text-danger"><?php echo 
    -form_error('txt_username'); ?></span> 
      </div> 
      </div> 
      </div> 

      <div class="form-group"> 
      <div class="row colbox"> 
      <div class="col-lg-4 col-sm-4"> 
      <label for="txt_password" class="control-label">Password</label> 
      </div> 
      <div class="col-lg-8 col-sm-8"> 
       <input class="form-control" id="txt_password" 
    name="txt_password" placeholder="Password" type="password" value="<?php 
    echo set_value('txt_password'); ?>" /> 
       <span class="text-danger"><?php echo  
    form_error('txt_password'); ?></span> 
      </div> 
      </div> 
      </div> 

      <div class="form-group"> 
      <div class="col-lg-12 col-sm-12 text-center"> 
       <input id="btn_login" name="btn_login" type="submit" 
      class="btn btn-default" value="Login" /> 
       <input id="btn_cancel" name="btn_cancel" type="reset" 
      class="btn btn-default" value="Cancel" /> 
      </div> 
      </div> 
     </fieldset> 
     <?php echo form_close(); ?> 
     <?php echo $this->session->flashdata('msg'); ?> 
     </div> 
     </div> 
     </div> 

    <!--load jQuery library--> 
    <script  

    src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"> 
    </script> 
    <!--load bootstrap.js--> 
    <script 
    src="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"> 

    </script> 
    </body> 
    </html> 
+0

Примечание: вам не нужно, чтобы закрыть контроллеры и модели с '>' https://www.codeigniter.com/user_guide/general/styleguide.html#php-closing-? tag – user4419336

+0

А также не используйте MD5 для паролей очень небезопасного использования вместо http://php.net/manual/en/function.password-hash.php и http://php.net/manual/en/function. password-verify.php – user4419336

+0

Спасибо 4 предложения, не нашли ли ошибки в моем коде? почему не может войти? @ wolfgang1983 –

ответ

0

в контроллере файла первое имя ваш класс должен быть капиталом, поэтому ..

class Login extends CI_Controller 

и сохранить файл ваш контроллер Login.php не login.php

+0

. Конфликты имен классов встречаются только в кодеигнитре версии 3.X. также он не вызывает никаких ошибок во время работы на локальном компьютере. –

+0

'$ usr_result> 0' не является ошибкой, он возвращает количество строк, поэтому нет необходимости принимать' count() ' –

+0

Спасибо, теперь следующая страница после входа в систему - 404 страницы ошибок. Я еще не создал страницу пользователя, является ли эта ошибка нормальной? @Hikmat Sijapati –

0

Создание вашей собственной системы аутентификации изобретать колесо, пустая трата времени, и это небезопасно. Существует класс для codeigniter 3, который делает это очень хорошо. Его имя - ионное.

http://benedmunds.com/ion_auth/

0

get_user, вероятно, никогда не называли!

«класс login_model extends CI_Model» должен быть «class Login_model extends CI_Model». Это требование:

Где Model_name - это имя вашего класса. Названия классов должны иметь первую букву , заглавную с остальным именем в нижнем регистре. Сделайте уверенным, что ваш класс расширяет базовый класс модели.

https://www.codeigniter.com/userguide3/general/models.html

Смежные вопросы