Сообщение об ошибке проверки формы Codeigniter - PullRequest
3 голосов
/ 08 декабря 2011

У меня есть форма в заголовке моего сайта, где я разрешаю пользователю войти в систему со своим именем пользователя / паролем ... затем я отправляю сообщение на страницу / входа и проверяю, существует ли имя пользователя, чтобы позволить пользователю войти в систему ... если существует проблема при входе в систему, я выводил эти ошибки ...

Я попытался использовать следующий код, чтобы показать пользовательскую ошибку, но безуспешно

    if ($this->form_validation->run() == false){
        $this->load->view("login/index", $data);
    }else{
        $return = $this->_submitLogin();
        if ($return == true){
            //success
        }else{
            $this->form_validation->set_message('new_error', 'error goes here');
            //error
        }
        $this->load->view("login/index", $data);
    }

как работает set_message и если это неправильный метод, какой из них позволяет мне показать пользовательскую ошибку в этом случае?

РЕДАКТИРОВАТЬ:

правила проверки:

private $validation_rules = array(
    array(
        'field'   => 'username',
        'label'   => 'Username',
        'rules'   => 'trim|required|callback__check_valid_username|min_length[6]|max_length[20]|xss_clean'
    ),
    array(
        'field'   => 'password',
        'label'   => 'Password',
        'rules'   => 'trim|required|min_length[6]|max_length[32]'
    ),
);

Ответы [ 5 ]

6 голосов
/ 09 декабря 2011

Метод set_message позволяет вам устанавливать ваши собственные сообщения об ошибках на лету. Но следует заметить, что имя ключа должно соответствовать имени функции, которому оно соответствует.

Если вам нужно изменить свое пользовательское правило, которое является _check_valid_username, вы можете сделать это, выполнив set_message в этой функции:

function _check_valid_username($str)
{
   // Your validation code
   // ...
   // Put this in condition where you want to return FALSE
   $this->form_validation->set_message('_check_valid_username', 'Error Message');
   //
}

Если вы хотите изменить сообщение об ошибке по умолчанию для определенного правила, вы можете сделать это, вызвав set_message с первым параметром в качестве имени правила и вторым параметром в качестве пользовательской ошибки. Например, если вы хотите изменить ошибку required:

$this->form_validation->set_message('required', 'Oops this %s is required');

Если по какой-либо причине вам нужно изменить язык вместо самого оператора ошибки, создайте свой собственный form_validation_lang.php и поместите его в нужную языковую папку внутри системного языкового каталога.

1 голос
/ 08 декабря 2011

Как вы можете видеть здесь , вы можете отобразить пользовательскую ошибку в своем представлении следующим образом:

<?php echo form_error('new_error'); ?>

PS: Если это не ваша проблема, опубликуйте соответствующий код просмотра и любое другое сообщение об ошибке, которое вы получаете.

0 голосов
/ 14 июля 2017

Требуется Codeigniter 3.0

Использование метода callback_;

class My_controller extends CI_Controller {

    function __construct() {
        parent::__construct();
        $this->form_validation->set_message('date_control', '%s Date Special Error');
    }

    public function date_control($val, $field) { // for special validate
        if (preg_match("/^[0-9]{2}.[0-9]{2}.[0-9]{4}$/", $val)) {
            return true;
        } else {
            return false;
        }
    }

    public function my_controller_test() {
        if ($this->input->post()) {
            $this->form_validation->set_rules('date_field', 'Date Field', 'trim|callback_date_control[date_field]|xss_clean');
            if ($this->form_validation->run() == FALSE) {
                $data['errors']=validation_errors();
                $this->load->view('my_view',$data);
            }
        }
    }
}

Результат:

если дата = '14 .07.2017 ' без ошибок

если дата = '14 -7-2017 ' Поле даты Дата Специальная ошибка

0 голосов
/ 06 июня 2014

Я сделал это, добавив еще одно правило проверки и снова запустив проверку. Таким образом, я мог бы сохранить отображение ошибки проверки в представлении непротиворечивым.

Следующий код является отредактированной выдержкой из моего рабочего кода.

public function login() {
    $this->form_validation->set_rules('email', 'Email', 'required');
    $this->form_validation->set_rules('password', 'Password', 'required');

    $data['content'] = 'login';

    if($this->form_validation->run()) {
        $sql = "select * from users where email = ? and password = ?";
        $query = $this->db->query($sql, array($this->input->post('email'), $this->input->post('password')));
        if($query->num_rows()==0) {
            // user not found
            $this->form_validation->set_rules('account', 'Account', 'callback__noaccount');
            $this->form_validation->run();
            $this->load->view('template', $data);
        } else {
            $this->session->set_userdata('userid', $query->id);
            redirect('/home');
        }
    } else {
        $this->load->view('template', $data);
    }
}

public function _noaccount() {
    $this->form_validation->set_message('_noaccount', 'Account must exist');
    return FALSE;
}
0 голосов
/ 08 декабря 2011

Проблема в том, что ваша форма уже подтверждена в вашей части IF!Вы можете решить проблему следующим образом:

if ($this->form_validation->run() == false){
    $this->load->view("login/index", $data);
}else{
    $return = $this->_submitLogin();
    if ($return == true){
        //success
    }else{
        $data['error'] = 'Your error message here';
        //error
    }
    $this->load->view("login/index", $data);
}

В представлении:

    echo $error;

Способ CI для проверки учетных данных пользователя заключается в использовании обратных вызовов:

$this->form_validation->set_rules('username', 'Username', 'callback_username_check');

...

public function username_check($str) {
    // your code here
}

Рекомендую прочитать документацию по CI: http://codeigniter.com/user_guide/libraries/form_validation.html

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