【问题标题】:validation username by html onblur in codeigniter在codeigniter中通过html onblur验证用户名
【发布时间】:2016-12-23 21:09:24
【问题描述】:

我在 Codeigniter 中有一个注册页面。我想检查用户名是否存在,当他们键入并退出其输入对象(onblur 事件)时。 这意味着我想在用户键入用户名时以及在失去对输入字段的关注时检查用户名是否存在? 我怎样才能检查它? 我在下面分享我的部分代码: 我的模型(返回 True 或 False):

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

请指导我。 谢谢

【问题讨论】:

  • 检查用户的用户名?你的意思是当用户输入用户名以及失去焦点时检查用户名是否存在?

标签: javascript php jquery codeigniter codeigniter-3


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

    Form Validation | CodeIgniter 3.1.7 documentation

    【讨论】:

      猜你喜欢
      • 2022-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-19
      • 1970-01-01
      • 2016-01-21
      • 2018-11-08
      • 1970-01-01
      相关资源
      最近更新 更多