2010-06-09 9 views
1

Pour une raison quelconque un utilisateur peut se connecter avec un mot de passe, d'abord je pensais que j'oublié de vérifier le mot de passe mais je ne ... et je ne peux pas trouver le problèmeCodeigniter: problème de validation

ici est le modèle:

/*#######################################################*/ 
    function validate() 
/*#######################################################*/ 
    { 
     $this->db->where('username', $this->input->post('username')); 
     $this->db->where('password', md5($this->input->post('password'))); 
     $q = $this->db->get('user_extra'); 

     if($q->num_rows() == 1): 
      return true; 
     else: 
      return false; 
     endif; 
    }//end of function validate() 

le contrôleur

/*#######################################################*/ 
     function validate_credentials() 
/*#######################################################*/ 
     { 
      $this->load->model('membership_model'); 

      $this->load->library('form_validation'); 

      $this->form_validation->set_rules('username', 'Name', 'trim|required'); 
      $this->form_validation->set_rules('password', 'password', 'trim|required'); 
      if(!$this->membership_model->validate()): 
       $this->form_validation->set_message('check_login', 'Login not correct, please try again.'); 
      endif; 

      if($this->form_validation->run() == FALSE): 
       $this->index(); 
      else: 
       $this->membership_model->userinfo($this->input->post('username')); 
       //should redirect to last view 
       redirect($this->session->flashdata('redirect_url')); 
      endif; 
     }// end of validate_credentials() 

Répondre

0

J'ai essayé avec la fonction de rappel, mais il ne fonctionne pas pour une raison quelconque, donc je viens de déménager le si-déclaration ci-dessous dans l'autre-déclaration de le validation-> run(), voici le code:

$this->form_validation->set_rules('username', 'Name', 'trim|required|xss_clean'); 
      $this->form_validation->set_rules('password', 'password', 'trim|required|xss_clean'); 


      if($this->form_validation->run() == FALSE): 
       redirect(base_url().'login/index/error'); 
      else:  
       if($this->membership_model->validate()): 
        $this->membership_model->userinfo($this->input->post('username')); 
        //should redirect to last view 
        redirect('home/index'); 
       else: 
        redirect(base_url().'login/index/error'); 
       endif; 
      endif; 
0

pourquoi ne pas vous créer une fonction de rappel dans la chaîne de validation?

Mettez cette fonction dans le même contrôleur

/*##############PRIVATE FUNCTION WITHIN THE SAME CONTROLLER###########*/ 
    function validate($username,$password) //if you use php 5 i would set this method to private one 
/*#######################################################*/ 
    { 
     $this->db->where('username', $username); 
     $this->db->where('password', md5($password)); 
     $q = $this->db->get('user_extra'); 

     if($q->num_rows() <= 1) 
      return true; 
     return false; 

    }//end of function validate() 

Et la ligne de règle:

$this->form_validation->set_rules('username', 'Name', 'trim|required|callback_validaion[password]'); 
+0

callback_validaion [mot de passe] dans les set_rules et vous nommez la validation de la fonction de contrôleur(), faut-il valider() ??? de toute façon j'ai essayé cela mais vous ne faites que passer le mot de passe, êtes-vous sûr qu'il va trouver le nom d'utilisateur? d'ailleurs vous avez ajouté la requête dans le contrôleur, il devrait être dans un modèle. mais merci pour votre réponse – Christophe

+0

oh désolé pour mon commentaire précédent, je comprends ce que vous voulez dire maintenant, mon mauvais. – Christophe

0

Pourquoi ne pas simplement utiliser un caalback dans le cadre de la validation du formulaire?

par exemple.

$this->form_validation->set_rules('password', 'Password', 'prep_for_form|required|xss_clean|callback_password_check'); 

et la fonction de rappel ...

function password_check($value) { /* call model and query database to get password */ if ($value == $password_from_model)) {  return TRUE; } else {  $this->form_validation->set_message('password_check', 'You have not used the correct %s.');   return FALSE; } } 
+0

Je l'ai fait mais cela n'a pas fonctionné – Christophe

+0

Désolé, moi mauvais. Oublié d'ajouter le est égal à dans la condition de rappel! – Rooneyl