Логин в Codeigniter не работает - PullRequest
0 голосов
/ 07 мая 2018

Я новичок в CodeIgniter, и у меня проблема с функцией входа в систему. Это всегда возвращает «Неверный пароль или имя пользователя» в качестве моего сообщения, но моя таблица «admin» с username = admin, password = admin. Я показал массив, чтобы увидеть результат, и он вернул admin, admin (поле, которое я ввел). У меня есть модель загрузки, библиотеки и помощник в файле autoload.php, и я не понимаю, где моя ошибка, и какие-либо предложения, которые помогут мне показать имя пользователя и пароль, хранящиеся в таблице «admin» (чтобы убедиться, что я правильно подключил базу данных )

Это мой контроллер

public function index(){

    $data['title'] = SITE_NAME.': Login';
    $data['msg'] = '';
    $this->form_validation->set_rules('username', 'Username', 'trim|required');
    $this->form_validation->set_rules('password', 'Password', 'trim|required');

    if ($this->form_validation->run() === FALSE) {
        $this->load->view('admin/home_view', $data);
        return;
    }

    $password = $this->input->post('password');

    $userRow = $this->Admin_model->authenticate_admin($this->input->post('username'), $password);
    if(!$userRow){
        $data['msg'] = 'Sai tên đăng nhập hoặc password';
        $this->load->view('admin/home_view', $data);
        return;
    }

    $admin_data = array(
            'admin_id' => $userRow->id,
             'name' => $userRow->admin_username,
             'is_admin_login' => TRUE);
    $this->session->set_userdata($admin_data);

    redirect(base_url().'admin/dashboard','');      
}   

My View

<div class="loginfrm">
<img src="<?php echo base_url('public/images/admin_images/logo.png');?>" class="mainlogologin">
 <div class="err"><?php echo($msg);?> <?php print_r($test);?></div>
<form method="post" action="">
  <div class="formwrp">
    <label>Tên đăng nhập</label> 
    <input name="username" class="frmfield" id="username" type="text">
    <?php echo form_error('username', '<div class="err"><span>', '</span></div>'); ?>
    <label>Mật khẩu</label>
    <input name="password" class="frmfield" id="password" type="password">
    <?php echo form_error('password', '<div class="err"><span>', '</span></div>'); ?>
    <div class="logbtnwr">
      <input value="Đăng nhập" class="loginbtn" type="submit">
    </div>
  </div>
</form>

И моя модель

    <?php
class Admin_model extends CI_Model {
    public function __construct() {
       // parent::__construct();
       $this->load->database();
    }

public function update($data){
    $return=$this->db->update('pp_admin', $data);
    return $return;
}



public function authenticate_admin($user_name, $password) {
    $this->db->select('*');
    $this->db->from('pp_admin');
    $this->db->where('admin_username', $user_name);
    $this->db->where('admin_password', $password);
    $Q = $this->db->get();
    if ($Q->num_rows > 0) {
        $return = $Q->row();
    } else {
        $return = 0;
    }
    $Q->free_result();
    return $return;
}

Спасибо заранее. Я искал много сайтов, но не знаю, где моя ошибка. Извините, если эта тема идентична

1 Ответ

0 голосов
/ 08 мая 2018

Попробуйте это:

public function index() {

    $data['title'] = SITE_NAME . ': Login';
    $data['msg'] = '';
    $this->form_validation->set_rules('username', 'Username', 'trim|required|xss_clean');
    $this->form_validation->set_rules('password', 'Password', 'trim|required|xss_clean');

    if ($this->form_validation->run() === FALSE) {
        $this->load->view('admin/home_view', $data);
        return;
    }

    $password = $this->input->post('password');

    $userRow = $this->admin_model->authenticate_admin($this->input->post('username'), $password);
    if (!$userRow) {
        var_dump($userRow);
        $data['msg'] = 'Sai tên đăng nhập hoặc password';
        $data['test'] = array($username, $password); //this is array to show the input
        $this->load->view('admin/home_view', $data);
        return;
    }

    echo 'it worked! <pre>';
    print_r($userRow);
    exit;

    $admin_data = array(
        'admin_id' => $userRow->id,
        'name' => $userRow->admin_username,
        'is_admin_login' => TRUE);
    $this->session->set_userdata($admin_data);

    redirect(base_url() . 'admin/dashboard', '');
}

Модель:

public function authenticate_admin($user_name, $password) {
    $this->db->where('username', $user_name);
    $this->db->where('password', $password);
    $query = $this->db->get('admin');
    if ($query->num_rows == 1) {
        return $query->row();
    } else {
        return false;
    }
}

И посмотрите, что он выводит. Если он продолжает выводить false и вводить условный оператор, то вы знаете одну из следующих вещей (1) вы неправильно вводите имя пользователя и / или пароль (2) вы вводите «правильное» имя пользователя и пароль, у вас просто есть данные неправильно хранится в БД.

Также:

  1. Хэшируйте свои пароли никогда не сохраняйте незашифрованные пароли в db
  2. Использовать существующую систему, такую ​​как Ion Auth
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...