在 codeigniter 中通过 html onblur 验证用户名

validation username by html onblur in codeigniter

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

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);
    }
}

请指导我。 谢谢

您可以使用 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();
}

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

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

其中 is_unique 是方法,users 是 table 名称, email 是数据库 table 中的列名,使用它可以检查唯一性。

Form Validation | CodeIgniter 3.1.7 documentation