Unable to access an error message corresponding to your field name перевод

У меня есть проблема в моем коде. Я создаю простой логин, используя CI3 для моего небольшого проекта. Моя проблема в том, что у меня есть сообщение об...

У меня есть проблема в моем коде. Я создаю простой логин, используя CI3 для моего небольшого проекта. Моя проблема в том, что у меня есть сообщение об ошибке при проверке обратного вызова.

Вот ошибка, которую я получаю всякий раз, когда пытаюсь проверить свою форму.

Unable to access an error message corresponding to your field name Password.(check_database)

Вот код mo в контроллере:

public function index() {

$this->form_validation->set_rules('username', 'Username', 'trim|required');
$this->form_validation->set_rules('password', 'Password', 'trim|required|callback_check_database');

$this->form_validation->set_error_delimiters('<div class="error text-red">', '</div>');

if($this->form_validation->run() == FALSE) {

$data = array();
$data['modules'] = $this->flx_lib->moduler($data);
$this->load->view('login', $data);

} else {//ok
}

}

public function check_database($password) {

$username = $this->input->post($username);
$result = $this->flx_users->validate_user($username, $password);

if($result) {
//ok
return TRUE;
} else {
$this->form_validation->set_message('check_database', 'Invalid username or password');
return FALSE;
}

}

Вот мой взгляд:

<div class="form-group has-feedback <?php error_exists('username'); ?>">
<input type="text" class="form-control" name="username" placeholder="Username" />
<span class="fa fa-user form-control-feedback "></span>
<?php echo form_error('username'); ?>
</div>

<div class="form-group has-feedback <?php error_exists('password'); ?>">
<input type="password" class="form-control" name="password" placeholder="Password">
<span class="glyphicon glyphicon-lock form-control-feedback"></span>
<?php echo form_error('password'); ?>
</div>

ты можешь помочь мне с этим? Я использую CI3 с HMVC

0

Решение

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

Вот ссылка для правильного ответа:
CodeIgniter — Невозможно получить доступ к сообщению об ошибке, соответствующему имени вашего поля Пароль. (Pword_check)

Solution:

1. Create MY_Form_validation.php file in libraries folder and paste following code in it.

if (!defined('BASEPATH')) exit('No direct script access allowed');
class MY_Form_validation extends CI_Form_validation
{

function run($module = '', $group = '')
{
(is_object($module)) AND $this->CI = &$module;
return parent::run($group);
}
}

And change if ($this->form_validation->run() == FALSE) to if ($this->form_validation->run($this) == FALSE) thats all folks..

0

Другие решения

public function index() {

$this->form_validation->set_rules('username', 'Username', 'trim|required');
$this->form_validation->set_rules('password', 'Password', 'trim|required|callback_check_database',
array('check_database' => 'Invalid username or password.')
);

$this->form_validation->set_error_delimiters('<div class="error text-red">', '</div>');

if($this->form_validation->run() == FALSE) {

$data = array();
$data['modules'] = $this->flx_lib->moduler($data);
$this->load->view('login', $data);

} else {//ok
}

}

public function check_database($password) {

$username = $this->input->post($username);
$result = $this->flx_users->validate_user($username, $password);

if($result) {
//ok
return TRUE;
} else {
return FALSE;
}

}

Я перекодировал этот. Что-то было перепутано.
Это из документы:

$this->form_validation->set_rules('field_name', 'Field Label', 'rule1|rule2|rule3',
array('rule2' => 'Error Message on rule2 for this field_name')
);

0

Я пытаюсь добавить Google reCAPTCHA в свое веб-приложение Codeigniter.

Но я все время сталкиваюсь с этой проблемой: Unable to access an error message corresponding to your field name Captcha. (recaptcha)

Я пытаюсь отправить форму, чтобы вывести ошибку, $server_output['success'] должен быть FALSE, таким образом выполняя $this->form_validation->set_message('recaptcha', 'Please redo the {field}.');, но Codeigniter, похоже, вообще не выполняет функцию обратного вызова …

Проверка работает для всего остального, поскольку выводится ошибка (в дополнение к сообщению об ошибке в заголовке):

The Username field is required.
The Password field is required.
The Password Confirmation field is required.
The Email field is required.

Я провожу проверку своей модели (следуя соглашению о том, что контроллеры должны быть тонкими, а модели толстыми):

public function __construct()
{
    parent::__construct();
    $this->load->library('form_validation');
}

public function register_validation()
{
    /*
     * INITIALIZE FORM VALIDATION RULES
     */
    $this->form_validation->set_rules('username', 'Username',
        array(
            // REMOVED FOR PRIVACY REASONS.
        )
    );
    $this->form_validation->set_rules('password', 'Password',
        array(
            // REMOVED FOR PRIVACY REASONS.
            )
    );
    $this->form_validation->set_rules('password_confirmation', 'Password Confirmation',
        array(
            // REMOVED FOR PRIVACY REASONS.
            )
    );
    $this->form_validation->set_rules('email', 'Email',
        array(
            // REMOVED FOR PRIVACY REASONS.
        )
    );

    /*
     * SET CUSTOM VERIFICATION RULES:
     * 1. GOOGLE RECAPTCHA WIDGET
     */
    $this->form_validation->set_rules('g-recaptcha-response', 'Captcha', 'callback_recaptcha');

    /*
     * CHANGE ERROR MESSAGES FOR SOME RULES.
     */
    $this->form_validation->set_message('is_unique', 'The {field} has already been taken!');

    /*
     * RUN VALIDATION,
     * IF VALIDATION IS NOT PASSED --> RETURN FALSE.
     */
    if ($this->form_validation->run() === FALSE)
        return FALSE;
    /*
     * ELSE WHEN EVERYTHING PASSES VALIDATION AND RECAPTCHA,
     * TRY TO CREATE NEW USER.
     */
    else
    {
        /*
         * TRY TO CREATE NEW USER.
         */
        if ($this->create_user())
        {
            /*
             * SET FLASHDATA TO ALERT USER THAT
             * THE ACCOUNT HAS BEEN SUCCESSFULLY CREATED.
             */
            $this->session->account_created = TRUE;
            $this->session->mark_as_flash('account_created');
            return TRUE;
        }
        else
        {
            /*
             * THROW ERROR AND ALERT USER VIA FLASHDATA.
             */
            $this->session->account_created = FALSE;
            $this->session->mark_as_flash('account_created');
            return FALSE;
        }
    }
}

Вот моя функция обратного вызова recaptcha в том же классе / модели:

/*
 * RECAPTCHA FUNCTION
 */
public function recaptcha($data = '')
{
    /*
     * INITIALIZE VARIABLES.
     */
    $google_api_url = 'https://www.google.com/recaptcha/api/siteverify';
    $google_secret_key = 'REMOVED FOR PRIVACY REASONS';
    $ip = $this->input->ip_address();
    $response = $data;

    /*
     * INITIALIZE CURL.
     */
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $google_api_url);
    curl_setopt($curl, CURLOPT_POST, 1);
    curl_setopt($curl, CURLOPT_POSTFIELDS,
        http_build_query(array(
                'secret' => $google_secret_key,
                'response' => $response,
                'remoteip' => $ip,
            )
        )
    );
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

    /*
     * RUN CURL.
     */
    $server_output = curl_exec($curl);
    curl_close($curl);
    $server_output = json_decode($server_output, true);

    /*
     * CHECK RECAPTCHA SUCCESS
     */
    if ($server_output['success'])
        return TRUE;
    else
    {
        $this->form_validation->set_message('recaptcha', 'Please redo the {field}.');
        return FALSE;
    }
}

Что я делаю неправильно? Это не работает, потому что я провожу проверку в модели? Застрял на этом хороших 2-3 часа … Надеюсь, код читабельный.

Благодаря ~

1 ответ

Лучший ответ

«Невозможно получить доступ к сообщению об ошибке, соответствующему имени вашего поля»

Я предполагаю, что ошибка выше отображается, когда поле не имеет значения и нет обязательного правила:

Попробуйте установить правило, как показано ниже

$this->form_validation->set_rules('g-recaptcha-response', 'Captcha', 'required|callback_recaptcha');

ИЛИ (для последней версии CI)

$this->form_validation->set_rules(
        'g-recaptcha-response', /* Field */
        'Captcha',              /* Label */
         array(                 /* Rules */
                'required',
                array($this->your_model, 'recaptcha')
              )
);

ИЛИ

$this->form_validation->set_rules(
        'g-recaptcha-response', /* Field */
        'Captcha',              /* Label */
         array(                 /* Rules */
                'required',
                array('my_recaptcha', array($this->your_model, 'recaptcha'))
              ),
        array(                 /* Error lists */
              'my_recaptcha' => 'Invalid Recaptcha'
             )
);

Подробнее см.

Akshay Hegde
24 Янв 2017 в 11:32

Вопрос:

В настоящее время я использую codeIgniter 3. Я создал страницу регистрации с именем пользователя, паролем, подтверждением пароля и электронной почтой. Для сравнения двух строк я использовал функцию strcmp(). Теперь проблема заключается в том, что я помещаю что-то вроде

password = "moon";
confirmation_password = "moon";

Он работает без проблем. Логически вы скажете мне 🙂 В противном случае, когда я помещаю что-то вроде

password = "moon";
confirmation_password = "something else";

Теперь он по-прежнему работает, показывая мне соответствующее сообщение об ошибке. Логически снова вы скажете мне. За исключением того, что появляется другое сообщение об ошибке:

Unable to access an error message corresponding to your field name Password confirmation.(check_information)

Я не понимаю, как это сообщение об ошибке может появиться только тогда, когда переменная confirm_password не совпадает с переменной пароля. Здесь мой код

function index()
{
$this->form_validation->set_rules('confirmation_password', 'Password confirmation', 'trim|required|callback_check_information');
}

function check_information($confirmation_password)
{
$password = $this->input->post('password');
if (strcmp($password, $confirmation_password))
{
echo 'password and confirmation password doesn't match';
return FALSE;
}

}

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

благодаря

Лучший ответ:

Вы должны возвращаться с булевым в обоих случаях, и не эхо сообщения, установите его:

function check_information($confirmation_password)
{
    $password = $this->input->post('password');
    if (strcmp($password, $confirmation_password))
    {
        $this->form_validation->set_message('check_information', 'password and confirmation password doesn't match');
        return FALSE;
    }
    else {
        return TRUE;
    }
}

Ответ №1

Существует простое решение, попробуйте следующее:

$this->form_validation->set_rules('confirmation_password', 'Password Confirmation', 'required|matches[password]');

У меня есть функция обратного вызова check_captcha, которая проверяет, $row is ==0 or == 1 (эта информация запрашивается из sql).

Проблема в том, что я не могу вызвать его из $self->form_validation->set_rule('captcha', 'call_back_check_captcha') в связи с тем, что моя функция принимает $row вар. То, как я это называю сейчас, я получаю сообщение об ошибке «Невозможно получить доступ». Как я могу заставить это работать?

function check_captcha( $row)
{
    if($row ==0)//didnt find any
    {
        $this->form_validation->set_message('captcha', 'text dont match captcha');
        return FALSE;
    }
    else
    {
        return TRUE;
    }
}


function create_member() 
        {   

            $past = time() - 7200; 

        $this->db->query("DELETE FROM captcha WHERE captcha_time <".$past);                 
        $sql = "SELECT COUNT(*) AS count FROM captcha WHERE word =? AND ip_address =?";     
        $binds = array($_POST['captcha'], $this->input->ip_address(), $past);
        $query= $this->db->query($sql, $binds);

        $row = $query->row(); //row query rows : if it found an entry =1 

            $self->check_captcha($row->count);

        //VALIDATIONS
        $this->form_validation->set_rules('first_name', 'First Name', 'trim|required');
        $this->form_validation->set_rules('last_name', 'Last Name', 'trim|required');      
        $this->form_validation->set_rules( 'email_address', 'Email Address', 'trim|required|valid_email|unique[user.email_address]');
        $this->form_validation->set_rules('username', 'Username', 'trim|required|min_length[4]|unique[user.username]');
        $this->form_validation->set_rules('password', 'Password', 'trim|required|min_length[4]|max_leng[32]');
        $this->form_validation->set_rules('password2', 'Password Confirmation','trim|required|matches[password]');
        if(!$_POST['captcha']){
        $this->form_validation->set_rules('captcha', 'Captcha','trim|required');}else{
        $this->form_validation->set_rules('captcha', 'Captcha', 'callback_check_captcha');}

        if($this->form_validation->run()==FALSE)
        {   //this -> to the curr obj(UserController) && registraion() points to the the function in controller
            $this->registration();  //reloads reg page so they can fill out right stuff
        }
        else

Понравилась статья? Поделить с друзьями:
  • Un6 ошибка стиральная машина haier
  • Un5e на весах ошибка
  • Umodel fatal error
  • Umi cms ошибка 15000
  • Umeplus gothic ошибка