在codeigniter

时间:2016-12-23 21:09:24

标签: javascript php jquery codeigniter codeigniter-3

我在Codeigniter中有一个注册页面。我想检查用户名是否存在,当他们输入并退出其输入对象(onblur事件)时。 这意味着我想在用户输入用户名时检查用户名是否存在,以及在输入字段失去焦点时? 我怎么检查呢? 我在下面分享了部分代码: 我的模型(返回正确或错误):

public function Check_UserName_Validate(){
    $CMD = "call UserName_Validate($this->input->post('edtUserName'));";
    $query = $this->db->query($CMD);
    if (mysqli_more_results($this->db->conn_id))
        mysqli_next_result($this->db->conn_id);
    return $query->row();
}

我的观点:

<div>
    First Name : <input type="text" id="edtFirstName" class="MyInputs">
    <br>
    Last Name : <input type="text" id="edtLastName" class="MyInputs">
    <br>
    Username : <input type="text" id="edtUserName" class="MyInputs">
    <br>
    Password : <input type="password" id="edtPassword" class="MyInputs">
</div>

我的控制器:

public function Signup($Flag = 0){
...
    $data["ErrorMSG"] = "";
    $data["ErrorKind"] = 0; 
    $this->form_validation->set_rules("edtFirstName", $data["FirstName_Caption"], "trim|required");
    $this->form_validation->set_rules("edtLastName", $data["LastName_Caption"], "trim|required");
    $this->form_validation->set_rules("edtUserName", $data["Username_Caption"], "trim|required");
    $this->form_validation->set_rules("edtPassword", $data["Password_Caption"], "trim|required");
    if ($Flag == 1){
        if ($this->form_validation->run() == FALSE) {
            $data["ErrorMSG"] = validation_errors();
            $data["ErrorKind"] = 4; 
            $this->load->view("Signup", $data);
        }
        else{
            /* Insert user information to database */
        }
    }
    else{
        $this->load->view("Signup", $data);
    }
}

请指导我。 感谢

2 个答案:

答案 0 :(得分:2)

您可以使用AJAX函数检查edtUserName字段更改。

$(document).ready(function(){
    var $username_field = $('#edtUserName');

    $username_field.on('keyup', function(){
        check_username($(this).val());
    });

    $username_field.on('blur', function(){
        check_username($(this).val());
    });

});

function check_username(value)
{
    $.post('site/username_exits', {edtUserName : value}, function(response) {
        if (response.exists) {
            // perform what is necessary when the username exists
        }
    }, "json");
}

在你的控制器中,你会添加:

public function username_exits()
{
    if($this->input->is_ajax_request()) 
    {
        // load model first
        $this->load->model(<MODEL-NAME>);
        $exists = $this-><MODEL-NAME>->Check_UserName_Validate($this->input->post('edtUserName'));
        echo json_encode(array('exists' => $exists));
    }
    else 
    {
        show_404();
    }
}

然后你应该在模型函数中改变一点。从中删除$this->input->post并将用户名作为参数传递。这样您就可以将数据收集到控制器中了。

public function Check_UserName_Validate($username){
    $CMD = "call UserName_Validate(?);";
    $query = $this->db->query($CMD, $username);

    if (mysqli_more_results($this->db->conn_id))
        mysqli_next_result($this->db->conn_id);

    return $query->row();
}

答案 1 :(得分:1)

要检查重复结果,您可以使用简单的form_validation is_unique 方法 -

$this->form_validation->set_rules('email', 'Email', 'required|valid_email|is_unique[users.email]');

is_unique 是一种方法,用户是表名,电子邮件是数据库表中的列名,使用它可以检查唯一性

Form Validation | CodeIgniter 3.1.7 documentation