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
$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.
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.
Ç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');
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