CodeIgniter: не отображается сообщение об ошибке входа - PullRequest
2 голосов
/ 25 марта 2011

Не могли бы вы помочь мне понять, почему мой код не будет отображать установленное сообщение:

$this->form_validation->set_message('Sorry %s is not correct.');

Проверка показывает, что они необходимы:

home.php -> контроллер

<?php

ob_start();

if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Home extends CI_Controller {

function __construct(){
    parent::__construct();
}

function index(){
    $this->login();
}

public function login()
{
    //Loads The Page Template
    $this->template->set('title','Admin Login');

    //Validation Check

    $this->form_validation->set_rules('username','Username','required|trim|max_length[50]|xss_clean');
    $this->form_validation->set_rules('password','Password','required|trim|max_length[200]|xss_clean|callback_checkUsernamePassword');

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

        $this->template->load('template','admin/admin_login');  

    }else{
        extract($_POST); // Gets data from form and creates vars
        $user_id = $this->login_model->check_login($username,$password);

        if(! $user_id || $password){ // != If username or password are not correct
            $this->session->set_flashdata('login_error',TRUE); //does not add the non valid login to the session
            $this->form_validation->set_message('Sorry %s is not correct.');
            redirect('admin');

        }else{
            $this->session->set_userdata('logged_in',TRUE);
            $this->session->set_userdata('user_id',$user_id);
            redirect('admin/dashboard');
        }
    }

}

function logout(){
    $this->session->unset_userdata('logged_in');
    echo 'You have now been logged out';
    redirect('admin');
}


}

//End of file home.php 
//Location: ./application/controllers/admin/home.php 

login_model.php -> модель

<?php

 class Login_model extends CI_Model
   {

function __construct()
{
parent::__construct();
}

function Login_model(){
    parent::Model();
}

function check_login($username,$password){
    $MD5_password = md5($password); // Tells the db that the password is a MD5 #

    $query_str ="SELECT id FROM users WHERE email = ? and password = ?"; // Tells the db that this is a query

    $result = $this->db->query($query_str, array($username, $MD5_password)); // Result

    //If it is all correct

    if($result->num_rows() == 1){

        return $result->row(0)->id;

    }else{
        return false;
    }
}
 }
?>

Я пробовал следующее:

$lang['error'] = "Sorry your %s is incorrect."; 

- This is set in the lang file

и

$this->form_validation->set_message('error','Sorry %s is not correct.'); 
  • Я не уверен, каким должен быть второй абзац

Ответы [ 3 ]

5 голосов
/ 25 марта 2011

Вы действительно должны читать user_guide.Ваша логика неверна.Например, вы не использовали свой обратный вызов.Вот почему ваши сообщения об ошибках не отображаются.Я добавил несколько комментариев, чтобы вы могли их прочитать.

public function login()
{
    $this->template->set('title','Admin Login');

    $this->form_validation->set_rules('username','Username', 'required|trim|max_length[50]|xss_clean');
    // You aren't using the callback here.
    $this->form_validation->set_rules('password','Password', 'required|trim|max_length[200]|xss_clean|callback_checkUsernamePassword');

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

        $this->template->load('template','admin/admin_login');  

    }else{
        // You shouldn't be adding messages when the validation has already passed. The setting should be when the validation is false.
        extract($_POST);
        $user_id = $this->login_model->check_login($username,$password);

        if(! $user_id || $password){
            $this->session->set_flashdata('login_error',TRUE); //does not add the non valid login to the session
            $this->form_validation->set_message('Sorry %s is not correct.');
            redirect('admin');

        }else{
            $this->session->set_userdata('logged_in',TRUE);
            $this->session->set_userdata('user_id',$user_id);
            redirect('admin/dashboard');
        }
    }
}

Вот что вы должны сделать.Я не собираюсь все кодировать, но дам вам идею.

public function login()
{
    $this->template->set('title','Admin Login');

    $this->form_validation->set_rules('username','Username', 'required|trim|max_length[50]|xss_clean');
    $this->form_validation->set_rules('password','Password', 'required|trim|max_length[200]|xss_clean|callback_checkUsernamePassword');

    if($this->form_validation->run() == TRUE){
        $this->session->set_userdata('logged_in',TRUE);
        $this->session->set_userdata('user_id',$user_id);
        redirect('admin/dashboard');
    }

    $this->template->load('template','admin/admin_login'); 
}

public function checkUsernamePassword() {
        extract($_POST); // Gets data from form and creates vars
        $user_id = $this->login_model->check_login($username,$password);

        if(! $user_id || $password){ // != If username or password are not correct
            $this->session->set_flashdata('login_error',TRUE); //does not add the non valid login to the session
            $this->form_validation->set_message('checkUsernamePassword', 'Sorry %s is not correct.');
            return FALSE

        }else{
            $this->session->set_userdata('logged_in',TRUE);
            $this->session->set_userdata('user_id',$user_id);
            redirect('admin/dashboard');
        }

}
0 голосов
/ 25 марта 2011
 $this->form_validation->set_message(); 

Используется, когда вы пытаетесь создать свои собственные функции проверки или устанавливаете новые сообщения об ошибках

Если вы пытаетесь создать собственную функцию проверки, вам следует следовать приведенной ниже статье

http://codeigniter.com/user_guide/libraries/form_validation.html

Что вы можете сделать, в соответствии с возвращаемым значением, вы можете установить $ this-> session-> set_flashdata ();и показать его на странице администратора.

http://codeigniter.com/user_guide/libraries/sessions.html

0 голосов
/ 25 марта 2011

Функция set_message для класса проверки формы CodeIgniter принимает два параметра: первый - это имя правила проверки, для которого вы хотите изменить сообщение, а второй - само измененное сообщение.

http://codeigniter.com/user_guide/libraries/form_validation.html

Таким образом, если вы хотите изменить сообщение для обязательных полей, вы должны использовать:

$this->form_validation->set_message('required', 'Sorry %s is not correct.');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...