web-dev-qa-db-fra.com

Impossible d'accéder à un message d'erreur correspondant à votre nom de champ

J'ai une fonction de rappel qui check_captcha qui voit si $row est ==0 ou == 1 (cette information est demandée à partir de SQL). 

Le problème est que je ne peux pas l'appeler à partir de $self->form_validation->set_rule('captcha', 'call_back_check_captcha') car ma fonction prend en compte un $row var. La façon dont je l’appelle maintenant, j’obtiens un message d’erreur Impossible d’accéder. Comment puis-je faire ce travail?

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
21
David Yang Liu
$this->form_validation->set_message('check_captcha', 'text dont match captcha');

Le nom du message correspond à la fonction, pas au champ. Donc, le régler sur "check_captcha" corrigera votre bogue. Le message d'erreur utilisera le nom de champ correct.

45
Laurence

En fait, la meilleure façon, au lieu d'écrire le message d'erreur directement sur le contrôleur, serait d'ajouter cette entrée "check_captcha" sur les langues.

Dans mon cas, le message pour la règle de validation (validation du formulaire) "less_than" n'était pas présent.

J'ai changé le fichier /system/language/??/form_validation_lang.php . J'ai ajouté l'entrée manquante.

9
Helton Ritter

Ça m'a aidé

allez sur application/config/autoload.php et ajoutez la classe d'assistance "Sécurité" à cet endroit.

$autoload['helper'] = array('security');

Ou ajoutez ceci avant la validation de votre formulaire

$this->load->helper('security');
2
Muhammad Tahir

ajoutez une entrée à votre fichier de langue avec named de la partie à l'intérieur du (yourfieldname) de errormessage - c'est résolu le problème 

0
StefB