使用数据库检查文本字段值

时间:2013-08-20 09:39:59

标签: php jquery mysql

我正在尝试使用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;
}

7 个答案:

答案 0 :(得分:1)

由于您使用的是文本框的keyup事件,请使用blurchange事件的文本框。

修改

更改

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

 if(result == '')

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

答案 1 :(得分:0)

好吧,在你的JS中,你正在比较用户输入的内容与PHP脚本返回的内容:

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

但您的PHP脚本唯一可以返回的是字符串'username exists'或空字符串:

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

尝试使用alert(result)

答案 2 :(得分: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() {

}

试试这个

答案 3 :(得分: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');                                                            
                    }
                }
            });

答案 4 :(得分:0)

而不是使用keyup使用'onchange'

答案 5 :(得分: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');                                                            
                }
            }
        });
  }

});

答案 6 :(得分:0)

首先,您应该更改触发支票代码的事件。现在你每次keyup开火。我建议将此更改为change

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

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

要满足此要求,请更改代码的php端。

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