2010-06-09 2 views
1

По какой-то причине пользователь может войти на форум с любым паролем, сначала я думал, что я забыл проверить пароль, но я не сделал ... и я просто не могу найти проблемуCodeigniter: проблема проверки

здесь является модель:

/*#######################################################*/ 
    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() 

контроллер

/*#######################################################*/ 
     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() 

ответ

0

Я попытался с помощью функции обратного вызова, но он не работает по какой-то причине, так что я просто переместил Условный оператор ниже в еще-заявление validation-> Run(), это код:

$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

почему бы вам не создать функцию обратного вызова в строке проверки?

Поместите эту функцию в том же контроллере

/*##############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() 

и верховенстве линии:

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

callback_validaion [пароль] в set_rules и вы называете функцию Validate контроллера(), это должно быть подтверждение() ??? в любом случае я пробовал, но вы только передаете пароль, вы уверены, что он найдет имя пользователя? кроме того, вы добавили запрос в контроллер, он должен быть в модели. но спасибо за ответ – Christophe

+0

О, извините за мой предыдущий комментарий, я понимаю, что вы имеете в виду сейчас, мой плохой. – Christophe

0

Почему бы просто не использовать caalback как часть проверки формы?

например.

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

и функции обратного вызова ...

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

Я сделал, но это не сработало – Christophe

+0

Жаль, мне плохо. Забытое добавить значение равно в состоянии обратного вызова! – Rooneyl

Смежные вопросы