Не удается правильно использовать проверку имени пользователя при регистрации - PullRequest
0 голосов
/ 15 мая 2011

Я следую http://www.youtube.com/watch?v=ua1pWx8WjFM при создании регистрации. В течение очень долгого времени я пытался найти причину, по которой я могу зарегистрировать любое количество одинаковых имен пользователей, в то время как код и все остальное выглядит одинаково и работает правильно в видео.

Моя модель "user_model":

    function register_user($username, $password, $name, $email)
{
    $sha1_password = sha1($password);

    $query_str = "INSERT INTO registration (username, password, name, email) VALUES (?, ?, ?, ?)";

    $this->db->query($query_str, array($username, $sha1_password, $name, $email));

}


function username_check($username)
{

    $query_str = "SELECT username from registration where username = ?";

    $result = $this->db->query($query_str, $username);

    if ($result->num_rows() > 0)
    {
        //username exists
        return true;
    }
    else
    {
        //username doesn't exist
        return false;
    }
}

}

контроллер "user.php":

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

    $this->load->model('User_model');
}

function index()
{   
    //$this->load->model('User_model');
    $this->register();
}

function register()
{   
    //$this->load->model('User_model');
    $this->load->library('form_validation');

    $this->form_validation->set_rules('username', 'Username', 'trim|required|alpha_numeric|min_length[6]|xss_clean|callback_username_not_exists');
    $this->form_validation->set_rules('name', 'Name', 'trim|required|alpha_numeric|min_length[6]|xss_clean');
    $this->form_validation->set_rules('email', 'Email Address', 'trim|required|min_length[6]|xss_clean|valid_email');
    $this->form_validation->set_rules('password', 'Password', 'trim|required|alpha_numeric|min_length[6]|xss_clean');
    $this->form_validation->set_rules('password_conf', 'Password Confirmation', 'trim|required|alpha_numeric|min_length[6]|matches[password]|xss_clean');


    if ($this->form_validation->run() == FALSE)
    {
        //$this->load->model('User_model');
        $this->view_data['page_title'] = 'Welcome to a Tutorial';
        $this->view_data['page_content'] = 'view_login_form';
        $this->load->view('view_register', $this->view_data);       //errors
    }
    else
    {
        $username = $this->input->post('username');
        $name = $this->input->post('name');
        $password = $this->input->post('password');
        $email = $this->input->post('email');

    //  $this->load->model('User_model');
        $this->User_model->register_user($username, $password, $name, $email);
    }

    function username_check($username)
    {

        $this->form_validation->set_message('username_check', 'That %s already exists');

        if ($this->User_model->check_username($username))
        {
            return false;
        }
        else
        {
            return true;
        }
    }

} }

Итак, что здесь не так?

1 Ответ

2 голосов
/ 15 мая 2011

Это довольно очевидно на самом деле; вероятно недосмотр в видео.

Вы установили это правило проверки для поля username:

$this->form_validation->set_rules('username', 'Username', 'trim|required|alpha_numeric|min_length[6]|xss_clean|callback_username_not_exists');

Правило обратного вызова: callback_username_not_exists

Ваша функция обратного вызова называется username_check. Он никогда не вызывается, поскольку имя не совпадает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...