【问题标题】:Check if username exists in database with codeigniter and ajax使用 codeigniter 和 ajax 检查用户名是否存在于数据库中
【发布时间】:2016-06-23 14:30:08
【问题描述】:

谁能帮助我使用 ajax 和代码点火器检查用户名是否在我的数据库中? 我不能使用 form_validation 方法,因为我的模式窗口会干扰检查。

目前我的控制器看起来像:

 function filename_exists(){
        $username = $this->input->post('username');
        $data['exists'] = $this->User_model->filename_exists($username);
    }

我的模特:

 function filename_exists($username)
 {

     $this->db->select('*'); 
     $this->db->from('users');
     $this->db->where('username', $username);
     $query = $this->db->get();
     if ($query->num_rows() == 0) {
         return true;
     } else {
         return false;
     }
 }

还有我的 ajax 帖子:

function check_if_exists() {

     <?php $username = $this->input->post('username');
    ?>
     var username = '<?php echo $username ?>';
    var DataString=$("#form1").serialize();
     $.ajax({
     url: "<?php echo base_url(); ?>index.php/Files/filename_exists/",
     type: "post",
     data: DataString + '&username=' + username,
     success: function(response) {


            if (response == true) {
                $('#msg').html('<span style="color: green;">'+msg+"</span>");

            }
             else {

                $('#msg').html('<span style="color:red;">Value does not exist</span>');
            }


         }
     });


}

更新

 <form name = "form1" id = "form1" method ="post"> <!--action="<?php echo base_url()."index.php/Admin/create_user"; ?>"-->
    <?php echo validation_errors(); ?>
    <label for="userID" class = "labelForm">User ID:</label>
    <input type="text" id="userID" name="userID" class = "input2">
    <label for="first_name" class = "labelForm">First Name:</label>
    <input type="text" id="first_name" name="first_name" class = "input2">
    <label for="last_name" class = "labelForm">Last Name:</label>
    <input type="text" id="last_name" name="last_name" class = "input2">
    <label for="username" class = "labelForm">Username:</label>
    <input type="text" id="username" name="username" class = "input2" onblur="check_if_exists();">
    <label for="password" class = "labelForm">Password:</label>
    <input type="password" id="password" name="password" class = "input2" onblur="checkPasswords();">
    <label for="passconf" class = "labelForm">Password:</label>
    <input type="password" id="passconf" name="passconf" class = "input2" onblur="checkPasswords();">
    <label for="email" class = "labelForm">Email:</label>
    <input type="text" id="email" name="email" class = "input2">
  <button type="button"  id = "new_user_submit">Add New User</button>

【问题讨论】:

  • $query-&gt;num_rows() == 0改成$query-&gt;num_rows() &gt; 0并测试
  • print_r($username) 在控制器中并检查数据即将到来
  • @Abdulla 当我尝试打印用户名时,什么也没有出现,但如果我在 ajax 帖子的成功部分使用 console.log(DataString),它会告诉我我输入了什么?
  • @RejoanulAlam 我改变了它,不幸的是没有运气! :(
  • 显示您的表单代码

标签: sql ajax codeigniter activerecord model


【解决方案1】:

试试这个

在 Ajax 中

function check_if_exists() {

var username = $("#username").val();

$.ajax(
    {
        type:"post",
        url: "<?php echo base_url(); ?>index.php/files/filename_exists",
        data:{ username:username},
        success:function(response)
        {
            if (response == true) 
            {
                $('#msg').html('<span style="color: green;">'+msg+"</span>");
            }
            else 
            {
                $('#msg').html('<span style="color:red;">Value does not exist</span>');
            }  
        }
    });
}

在控制器中

function filename_exists()
{
    $username = $this->input->post('username');
    $exists = $this->User_model->filename_exists($username);

    $count = count($exists);
    // echo $count 

    if (empty($count)) {
        return true;
    } else {
        return false;
    }
}

在模型中

function filename_exists($username)
{
    $this->db->select('*'); 
    $this->db->from('users');
    $this->db->where('username', $username);
    $query = $this->db->get();
    $result = $query->result_array();
    return $result
}

【讨论】:

  • 不幸的是它仍然无法工作@Abdulla .. 当我 console.log(username) 我可以看到 init ,但是当我写 console.log(response) 它出现空白
  • 我实际上发现,当我在控制器中 echo($count) 时它似乎可以工作(就像在 if 语句之前一样)。这似乎是一种奇怪的行为,尽管当我将其取出时,无论用户名是否存在,它似乎都会返回 false 。这样可以使用吗? @abdulla 也非常感谢您的帮助!
  • 为什么要查询数据库中的所有用户数据?这将是一个更好的查询,将花费更少的时间。 `function filename_exists($username) { $this->db->where('username',$username);返回 $this->db->count_all_results('users'); }
  • @AbdullaNilam 先生,我在警报中收到空白回复,我该怎么办?
  • 在控制器中而不是返回添加回声。例如:return true 应该是 echo true。
【解决方案2】:

如果您只是想查看用户是否已经存在,则没有理由使用 get() 函数进行查询。只需执行 count_all_results() ,如果找到用户,它将返回一个数字,如果没有,则返回 0。

function filename_exists($username) {
  $this->db->where('username', $username);
  return $this->db->count_all_results('users'); 
}

如果用户名存在于您的数据库中,所有这一切都会返回一个大于零的数字。

【讨论】:

    【解决方案3】:

    只是另一种结果相同的方法

    型号

    function filename_exists($username) {
       $this->db->select()->from('users')->where('username', $username);
       $query = $this->db->get();
    
       return $query->first_row('array'); // returns first row if has record in db
    }
    

    控制器

    function filename_exists() {
       $username = $this->input->post('username');
       $user = $this->user_modal->filename_exists($username);
    
       return !empty($user); // not empty returns true else false
    }
    

    AJAX

    check_if_exists 函数内部。

    $.post('<?php echo base_url(); ?>index.php/files/filename_exists', { username: $('#username').val() }, function(response) {
        var html = '<span style="color:red;">Value does not exist</span>';
        if (response == true) {
           html = '<span style="color: green;">' + msg + '</span>';
        } 
        $('#msg').html(html);
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多