如何检查PHP / MYSQL中是否已存在USERNAME?

时间:2015-02-16 06:29:47

标签: javascript php jquery mysql ajax

我目前正在PHP中配置“用户注册”表单。

尝试创建一个简单的函数来检查数据库中是否已存在用户名

在做完我的研究之后,我发现有几种方法可以做到。

(a)最好的方法可能是使用PHP / AJAX组合,立即检查用户名是否已经存在(换句话说,检查完成 BEFORE 用户点击“提交“按钮;

(b)另一种方法是进行简单的SQL查询,如果数据库中已存在该特定用户名,则会返回错误消息。 (此方法的唯一缺点是:检查仅在 AFTER 用户点击“提交”按钮时完成。

当然,我会更喜欢选项A.但是,我试图创建一个有效的AJAX / jQuery脚本是不成功的。

所以,我改用了选项B.

而且,我得到了它。

以下是我使用的简单查询:

if(isset($_POST['submit1'])||isset($_POST['submit1'])) {

$login = $_POST['login'];
$query_login = "SELECT login FROM registration WHERE login='$login';";
$result_login = mysqli_query($conn,$query_login);
$anything_found = mysqli_num_rows($result_login);

       //check if the username already exists

if($anything_found>0)
    {
    echo "Sorry, that Username is already taken. Please choose another.";
    return false;  }

    else {      //proceed with registration

工作得很好。显示错误。

唯一的问题是:登记表本身就消失了。

我希望在注册表单的同一页面上显示错误,而无需重置或以某种方式返回。

我知道这样做的原因很轻微(而且我有点愚蠢:D:D)

可能与查询结尾处的“返回错误”有关。

但是,我不确定。

(a)如何在表单页面上显示错误消息?

(b)或者,更好的是,我可以使用一个JavaScript函数,这样我就可以在“提交”按钮中调用该函数.............. .. like so: onSubmit = return function() ??

由于

更新:这是我的表单代码。

  form action="myform.php" method="post">
  <br>

  Choose a username : <input type="text" name="login" value="<?=$login?>"     
                      required>

更新

我能够找到以下jQuery代码:

      $(document).ready(function() {  

    //the min chars for username  
    var min_chars = 3;  

    //result texts  
    var characters_error = 'Minimum amount of chars is 3';  
    var checking_html = 'Checking...';  

    //when button is clicked  
    $('#check_username_availability').click(function(){  
        //run the character number check  
        if($('#username').val().length < min_chars){  
            //if it's bellow the minimum show characters_error text '  
            $('#username_availability_result').html(characters_error);  
        }else{  
            //else show the cheking_text and run the function to check  
            $('#username_availability_result').html(checking_html);  
            check_availability();  
        }  
       });  

      });  

    //function to check username availability  
    function check_availability(){  

    //get the username  
    var username = $('#username').val();  

    //use ajax to run the check  
    $.post("check_username.php", { username: username },  
        function(result){  
            //if the result is 1  
            if(result == 1){  
                //show that the username is available  
                $('#username_availability_result').html(username + ' is              
                   Available');  
            }else{  
                //show that the username is NOT available  
                $('#username_availability_result').html(username + ' is not 
            Available');  
            }  
         });  

           }  

我认为,就我的具体例子而言:

(a)jQuery文件无法插入到实际的PHP文件中(我的php文件名为: registration.php ,其中包括html和php);

(b)这个特定的jQuery文件包含一个“按钮”,需要单击该按钮以检查用户名是否已存在。这不是一个坏主意;但是,我宁愿这是自动完成的,无需点击按钮(让我们面对它:有些用户确实太无能为力地执行这个简单的检查)。我的目标是尽可能地让用户免于执行这些微不足道的任务:D

无论如何,我的观点是:为了消除对按钮的需要,我想包括一个自动功能,一旦用户输入用户名就会检查。

根据谷歌的说法,我需要以下功能:

替换 $('#check_username_availability')。点击(function(){ ...与 $('#username')。keyup(function(){... < / p>

(c)有没有办法真正插入那个JQUERY到“registration.php”?或者,它应该完全是一个单独的文件吗?

3 个答案:

答案 0 :(得分:1)

更好的方法是绑定“.blur”事件,您可以通过ajax检查用户名是否有效。在提交表单之前,请不要忘记在提交表单后检查用户名。 在输入框下方创建

<span class= "error">Username is already present. </span> 
<span class= "success">Username can be assigned. </span> 

并相应地显示消息。

您可以将脚本用作

$.ajax({
  url : "check_username.php",// your username checker url
  type : "POST",
  data : {"username",$("input.username").val()},
  success : function (data)
          {
             if(data == "success")
              {$(".success").show();$(".error").hide();}
             else
              {$(".error").show();$(".success").hide();}
          },
});

你的php代码是这样的:

$query = "SELECT username FROM tab_users WHERE username = '".$_POST['username']."'";
$result_login = mysqli_query($conn,$query_login);
$anything_found = mysqli_num_rows($result_login);

   //check if the username already exists

if($anything_found>0)
{
    echo "fail";
    return false;  
}
else 
{ 
    echo "success"; 
    return false;    
}

答案 1 :(得分:1)

您可以禁用提交按钮并在输入字段附近添加范围消息。

检查此代码:

&#13;
&#13;
function checkUsername()
{
  var username = document.getElementById('username');
  var message = document.getElementById('confirmUsername');
  
  /*This is just to see how it works, remove this lines*/
  message.innerHTML = username.value;
  document.getElementById("send").disabled = true;  
  /*********************************************/

 $.ajax({ 
    url : "check_username.php",// your username checker url
    type : "POST",
    data : {username: username},        
    success:  function (response) {						
        if (response==0)
        {
              message.innerHTML = "Valid Username";
              document.getElementById("send").disabled = false;		
	}
	if (response==1)
	{
              message.innerHTML = "Already Used";
              document.getElementById("send").disabled = true;	
   	}
					
							
     }
 });					
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>

<label for="uername">Username:</label>
<input type="text" class="form-control" name="username" id="username" onkeyup="checkUsername(); return false;" required/>	

<span id="confirmUsername" class="confirmUsername"></span>

<button type="submit" id="send" name="action" value="Send">Send</button>
&#13;
&#13;
&#13;

答案 2 :(得分:0)

把这个

include([your validating php file]);

并在您的表单操作链接中指向您的登录表单文件。

注意:您的登录文件必须是php文件。