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


How to check if USERNAME already exists in PHP/MYSQL?

我目前正在用PHP配置我的"用户注册"表单。

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

经过研究,我发现有几种方法可以做到这一点。

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

(b) 另一种方法是执行一个简单的SQL查询,如果数据库中已经存在特定的用户名,该查询将返回一条错误消息。(此方法的唯一缺点是:检查仅在用户单击"Submit"按钮后进行。

当然,我更喜欢方案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)

可能与查询末尾的"return false"有关。

但是,我不确定。

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

(b) 或者,更好的是,有没有一个JavaScript函数我可以用来做这件事,这样我就可以简单地调用"提交"按钮中的函数。。。。。。。。。。。。。。。。类似于:onSubmit=return function()??

感谢

UPDATE:这是我的表单代码。

  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')。用$[('#username').keyup(function(){…

(c) 难道没有任何方法可以将JQUERY插入"registration.php"中吗??或者,它应该完全是一个单独的文件吗?

更好的方法是绑定".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;    
}

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

检查此代码:

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

放入此

include([your validating php file]);

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

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