0

我正在尝试使用 jquery 和 php 检查插入用户名是否正确。如果用户名与数据库中的值不匹配,则应触发警报“您的用户名错误”。

我试过这个,但我无法弄清楚。当我键入每个字母触发的用户名警报消息时。但是我需要在输入文本字段后用数据库检查给定的值。

这是我的 Jquery -

    // --- Check Username Availability for successful login --- //
    $('#loginusername').keyup(function() {
      var checkname=$(this).val();
      var availname=remove_whitespaces(checkname);
      if(availname!=''){
         var String = 'username='+ availname;

         $.ajax({
                type: "POST",
                url: "emailCheck.php",
                data: String,
                cache: false,
                success: function(result){
                    var result=remove_whitespaces(result);
                    if(result == $('#loginusername').val()){
                        alert('Your entered Username is ok');                           
                    } else {
                        alert('Your entered Username is wrong');                                                            
                    }
                }
            });
      }
   });  

这是来自 emailCheck.php

if(isset($_POST['username']) && !empty($_POST['username'])){
   $userName = mysqli_real_escape_string($dbc, $_POST['username']);

    $q = "SELECT username FROM userlogin 
            WHERE username = '$userName'";
   $r = mysqli_query($dbc, $q);

   $count = mysqli_num_rows($r);

    $HTML='';
   if($count == 1){
      $HTML='username exists';
   }else{
      $HTML='';
   }

    echo $HTML;
}
4

7 回答 7

1

因为您正在使用文本框的keyup事件,所以使用文本框的blurORchange事件。

编辑

改变

 if(result == $('#loginusername').val())

 if(result == '')

因为您在未找到匹配项时发送空白结果。

于 2013-08-20T09:43:36.110 回答
0

好吧,在您的 JS 中,您将用户输入的内容与 PHP 脚本返回的内容进行比较:

result == $('#loginusername').val()

但是您的 PHP 脚本唯一可以返回的是字符串“用户名存在”或空字符串:

if($count == 1){
  $HTML='username exists';
}else{
  $HTML='';
}

尝试仅使用alert(result).

于 2013-08-20T09:43:53.353 回答
0
var timer;
var time = 2000; 
$('input').keyup(function() {
  // when user stop typing for {time} second, do next function
  timer= setTimeout(doSomething, time); 
)
$('input').keydown(function() {
  // when user continue typing clear timer
  clearTimeout(timer);
)
function doSomething() {

}

尝试这个

于 2013-08-20T09:44:39.710 回答
0

更改echo $HTML;echo '{"success":"true", "usernameExists":"' + $count + '"}'; 然后将您的 Javascript 修改为此

...

$.ajax({
                type: "POST",
                url: "emailCheck.php",
                data: {username: availname},
                cache: false,
                success: function(result){
                    if(result.usernameExists == 1){
                        alert('Your entered Username is ok');                           
                    } else {
                        alert('Your entered Username is wrong');                                                            
                    }
                }
            });
于 2013-08-20T09:44:55.787 回答
0

而不是使用 keyup 使用 'onchange'

于 2013-08-20T09:45:32.033 回答
0

您可以使用.blur触发器。http://api.jquery.com/blur/

// --- Check Username Availability for successful login --- //
$('#loginusername').blur(function() {
  var checkname=$(this).val();
  var availname=remove_whitespaces(checkname);
  if(availname!=''){
     var String = 'username='+ availname;

     $.ajax({
            type: "POST",
            url: "emailCheck.php",
            data: String,
            cache: false,
            success: function(result){
                var result=remove_whitespaces(result);
                if(result == $('#loginusername').val()){
                    alert('Your entered Username is ok');                           
                } else {
                    alert('Your entered Username is wrong');                                                            
                }
            }
        });
  }

});

于 2013-08-20T09:45:36.357 回答
0

首先,您应该更改触发检查代码的事件。现在你对每一个keyup. 我建议将其更改为change

$('#loginusername').change(function() {

其次,您的 json 响应存在问题。在您的 php 端,当找不到用户名时使用空字符串进行响应,找到用户名时会出现错误消息。但是当字符串可用时,您的 javascript 端期望返回值与用户在文本框中键入的用户名相同。

为了满足这个要求,让我们更改代码的 php 端。

 $HTML='';
   if($count == 1){
      $HTML='username exists';
   }else{
      $HTML=$_POST['username'];
   }
于 2013-08-20T09:48:12.273 回答