【问题标题】:Check text field value with database使用数据库检查文本字段值
【发布时间】:2013-08-22 07:28:26
【问题描述】:

我正在尝试检查插入用户名是否正确或不使用 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;
}

【问题讨论】:

  • 您的代码在哪里停止工作? .keyup 被调用了吗?
  • 您可以将检查绑定到change 事件,而不是将检查绑定到change 事件,该事件会在您离开该输入字段后触发。
  • @cars10 我尝试使用change。那么它总是会去其他 ajax 成功函数的一部分。
  • 当您使用 POST 发送数据时,您必须将其包含在像 data: {username:availname} 这样的对象格式中,发送字符串 'username='+ availname 将不起作用。

标签: php jquery mysql


【解决方案1】:

因为你使用的是keyup文本框事件,所以使用blur OR change文本框事件。

编辑

改变

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

 if(result == '')

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

【讨论】:

  • 我尝试了blurchange。但它始终是 ajax 成功功能的一部分。并且还尝试在成功功能的其他部分中使用alert(result)。然后警报“用户名存在”字符串。
  • 感谢所有回答。
【解决方案2】:

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

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

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

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

尝试只使用alert(result)

【讨论】:

  • 我尝试在 ajax 成功函数的 else 部分中使用 alert(result),然后它会提示“用户名存在”字符串。
【解决方案3】:
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() {

}

试试这个

【讨论】:

    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

      不要使用keyup,而是使用'onchange'

      【讨论】:

        【解决方案6】:

        您可以使用.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');                                                            
                        }
                    }
                });
          }
        

        });

        【讨论】:

          【解决方案7】:

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

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

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

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2020-01-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-12-30
            • 2018-03-31
            • 1970-01-01
            相关资源
            最近更新 更多