在使用PHP CodeIgniter和JQuery点击提交按钮之前,检查用户名是否存在


Check if username exists before hitting the submit button using PHP CodeIgniter and JQuery

我甚至在使用 CodeIgniter 点击提交按钮之前就试图检查用户名是否存在。在我看来,这是Javascript。

<script type="text/javascript" src="../assets/js/jquery.min.js"></script>
<script type="text/javascript"><!--'
$(document).ready(function(){
$('#username').keyup(username_check);
});
function username_check(){  
var username = $('#username').val();
if(username == "" || username.length < 4){
$('#username').css('border', '3px #CCC solid');
$('#tick').hide();
}else{
jQuery.ajax({
   type: "POST",
   url: "addpatient/insert",
   data: 'username='+ username,
   cache: false,
   success: function(response){
if(response == 1){
    $('#username').css('border', '3px #C33 solid'); 
    $('#tick').hide();
    $('#cross').fadeIn();
    }else{
    $('#username').css('border', '3px #090 solid');
    $('#cross').hide();
    $('#tick').fadeIn();
         }
}
});
}

}
</script>


以下是表格的一部分:

<form method="post" action="addpatient/insert">
        <table id='addpatient'>
            <tr>    
                <td width=100> Username:
                <td width=150>  <input type='text' id='username' name='username'>
            </tr> .....


这是控制器的一部分(功能insert

$patient['username'] = strtolower($this->input->post('username'));
$response = $this->user->check_username($patient['username']); 


下面是模型中的一个函数:

function check_username_availability($username){
    $query = $this->db->query("SELECT username FROM users WHERE username = '".$username."'");
    $this->db->limit(1);
    $num = $query->num_rows();
    return $num;
 }


每当我尝试它时,结果总是有效的,即使数据库中已经存在这样的用户名。我认为我的问题出在javascript的type: "POST"上。它如何获取(在model中获取)的行数到javascript?我只是在这里拍了我的代码。请帮我完成这项工作。我是使用CodeIgniter框架的新手。谢谢!



编辑

$(document).ready(function(){
$('#username').keyup(username_check);
});
function username_check(){  
var username = $('#username').val();
if(username == "" || username.length < 4){
$('#username').css('border', '3px #CCC solid');
$('#tick').hide();
}else{
var url = 'addpatient/insert';
var data = {username:'username'};
$.post(url, data, function(result){
   console.log(result);
  function(response){
if(response == 1){
    $('#username').css('border', '3px #C33 solid'); 
    $('#tick').hide();
    $('#cross').fadeIn();
    }else{
    $('#username').css('border', '3px #090 solid');
    $('#cross').hide();
    $('#tick').fadeIn();
         }
}
}
});
}

}

假设你的 php 代码返回正确的值...在成功回调中修剪结果或返回 json。

if($.trim(response) == 1)

试试这个

function check_username_availability($username){
    $query = $this->db->query("SELECT username FROM users WHERE username = '".$username."'");
    $this->db->limit(1);
    $num = $query->num_rows();
    echo $num; //echo the value instead return
 }

我认为你的ajax调用是问题所在。您发布的数据应该是一个对象。尝试在jquery中执行此操作。它更容易:

var url = 'addpatient/insert';
var data = {username:'username'};
$.post(url, data, function(result){
   console.log(result);
   ..your success function..
});