Невозможно получить доступ к ошибке формы входа codeigniter - PullRequest
0 голосов
/ 05 сентября 2018

Я создаю форму входа, я написал все из документации и из других ресурсов. Когда я пытаюсь войти в систему, я получаю сообщение об ошибке Unable to access an error message corresponding to your field name Username.(xss_clean) и Unable to access an error message corresponding to your field name Password.(xss_clean)

Я проверил свою базу данных из phpMyAdmin, база данных уже существует. Я проверил свое соединение базы данных, это также связано. Затем я проверил таблицу admin, она тоже там и закодирована в модели.

Можете ли вы, ребята, помочь мне, что я тут не так сделал?

Контроллер

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

class LoginCheck extends CI_Controller {

    public function __construct(){
        parent::__construct();
        $this->load->library('form_validation');
        $this->load->database();
        $this->load->helper('form');
        $this->load->helper('url');
        $this->load->model('admin');
    }

    function index() {
        //This method will have the credentials validation
        $this->form_validation->set_rules('username', 'Username', 'trim|required|xss_clean');
    $this->form_validation->set_rules('password', 'Password', 'trim|required|xss_clean|callback_check_database');

        $this->form_validation->set_error_delimiters('<br /><div class="form-error">', '</span>');

    if($this->form_validation->run() == FALSE) {
        //Field validation failed.  User redirected to login page
        $this->load->view('index');
    }

    else {
        //Go to private area
        echo "Private area";
        //redirect('listing', 'refresh');
    }
}

    function check_database($password) {
        //Field validation succeeded.  Validate against database
        $username = $this->input->post('username');
        //query the database
        $result = $this->admin->login($username, $password);
        //print_r($result);

    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;
        }
    }
}

?>

View

<?php
$attributes = array('class' => 'login100-form validate-form flex-sb flex-w');
echo form_open('index.php/logincheck', $attributes);
?>
<span class="login100-form-title p-b-51">
<img src="<?php echo site_url('login_assets/img/logo.png')?>">
</span>
<div class="wrap-input100 validate-input m-b-16" data-validate = "Username is required">
<?php echo form_error('username'); ?>
<input class="input100" type="text" name="username" value="<?php echo set_value('username'); ?>" placeholder="Username">
<span class="focus-input100"></span>
</div>
<div class="wrap-input100 validate-input m-b-16" data-validate = "Password is required">
<?php echo form_error('password'); ?>
<input class="input100" type="password" name="password" value="<?php echo set_value('password'); ?>" placeholder="Password">
<span class="focus-input100"></span>
</div>
<div class="container-login100-form-btn m-t-17">
<?php 
$attributes = array('class' => 'login100-form-btn');
echo form_submit('submit', 'Login', $attributes);
?>
</div>
<?php echo form_close(); ?>

1 Ответ

0 голосов
/ 05 сентября 2018

Похоже, в ваших первоначальных правилах проверки была крошечная ошибка. В CI за окончательным правилом проверки не должен следовать канал |. В этом случае труба должна использоваться только в качестве разделителя.

Попробуйте изменить правила проверки, чтобы удалить конечную трубу:

$this->form_validation->set_rules('username', 'Username', 'rule1|rule2|rule3');
$this->form_validation->set_rules('password', 'Password', 'rule1|rule2');

Также обратите внимание, что ваша форма указывает на класс LoginCheck, но она не указывает ни на какую конкретную функцию / метод. Даже если по умолчанию это значение равно index(), форма должна указывать на определенный класс / метод, поэтому вы должны использовать

echo form_open('index.php/logincheck/index', $attributes);

Наконец, ваши обновленные правила включают xss_clean, который был удален из библиотеки проверки формы CI и требует загрузки помощника по безопасности. Вы можете обойти ошибку, загрузив помощник безопасности в конструкции, но не забывайте, что фильтрация XSS должна выполняться на выходе, а не на входе (именно поэтому она была удалена из lib валидации формы)

Вы можете прочитать немного об этой последней части ЗДЕСЬ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...