检查用户名是否通过 AJAX 在 php 中使用 mysql 实时存在


check if username exists in real-time through AJAX in php with mysql

我正在用php/MySQL做一个项目,它要求我在用户输入用户名时实时检查用户名。

这是我的用户名.php用户实际输入用户名和密码的地方,以及触发检查.php的地方......

<html>
<head>
   <script type="text/javascript" src="js/jquery-1.7.1.min.js"></script>
   <script type="text/javascript">
     $(document).ready(function(){
        $("#username").change(function(){
             $("#message").html("<img src='images/loader.gif' /> checking...");

        var username = $("#username").val();
          $.ajax({
                type:"post",
                url:"check.php",
                data:"username =" + username,
                    success:function(data){
                    if(data==0){
                        $("#message").html("<img src='images/tick.png' /><span style='font-size:13px; color: black'> Username available</span>");
                    }
                    else{
                        $("#message").html("<img src='images/err.png' /><span style=font-size:13px; color: red'> Username already taken</span>");
                    }
                }
             });
        });
     });
   </script>
   </head>
   <body>
   <table>
    <tr>
          <td>Username</td>
          <td>:</td>
          <td><input type="text" name="username" id="username"/><td>
            <td id="message"><td>
    </tr>
    <tr>
          <td>Password</td>
          <td>:</td>
          <td><input type="text" name="password" id="password" /><td>
    </tr>
   </table>
   </body>
   </html>

这是检查.php其中用户名在数据库中检查。

<?php
$con = mysqli_connect("localhost", "root", "hilbi", "userdb");
if (mysqli_connect_errno())
{
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
  // $username = $_POST["username"];
  $username = 'hilbi';
  $query = mysqli_query($con,"SELECT * FROM users WHERE username =   '$username' ");
  $find = mysqli_num_rows($query);
  echo $find;
  mysqli_close($con);
  ?>

现在检查.php工作正常(我通过单独执行它进行了检查,它在找到用户名时返回 1反之亦然
但是,当我执行用户名时.php它总是返回用户名已被占用。似乎它实际上根本不会在数据库中查找实际上没有这样的用户名。

任何形式的帮助将不胜感激...

使用 jQuery 在 javascript 中发送数据,如下所示:

$.post( "check.php", { user: $("#username").val() }, function (data){
  if(data=='1'){
   //do 1
  }
  elseif(data=='0'){
    //do 0
  }
});

在您的支票中.php像这样获取用户名

//some basic validation
if(!isset($_POST['user'] || empty($_POST['user']))
{
   echo '0'; exit();
}
$username = trim($_POST['user']); 

要使其正常工作,请检查.php必须返回 1 或 0,不要在那里回显 mysql 错误或任何内容。 如果发生任何错误,只需回显 0。

所以我花了一些时间寻找和测试答案,所以我应该发布我的结果和对我有用的东西。

html, or php form:
<script src="http://code.jquery.com/jquery-3.3.1.js"></script>
<form class="a16" action="register.php" method="POST" autocomplete="on">
                                    <label for="userName" class=" ">Użytkownik:</label>
<input type="text" name="userName" placeholder="Username" id="userName1" onBlur="checkAvailability()">
      <span id="user-availability-status"></span> 
<p><img src="LoaderIcon.gif" id="loaderIcon" style="display:none" /></p>
 <script type="text/javascript">     
function checkAvailability() {
$("#loaderIcon").show();
jQuery.ajax({
url: "proceser.php",
data:'userName='+$("#userName1").val(),
type: "POST",
success:function(data){
$("#user-availability-status").html(data);
$("#loaderIcon").hide();
},
error:function (){}
});
}
</script>
and proceser.php :
<?php
 include 'dbconnect.php';   //standard datebase local connection..
 if(isset($_POST['userName']) && $_POST['userName']!="") {
     if ($stmt = $con->prepare('SELECT userName FROM users WHERE userName = ?')) {
         $stmt->bind_param('s', $_POST['userName']);
         $stmt->execute();
         $stmt->store_result();
         $numRows = $stmt->num_rows;
         if ($numRows > 0) {
             echo "<span class=''> Username Not Available.</span>";
         } else {
             echo "<span class=''> Username Available.</span>";
         }
     }
 }
$con->close();
ob_end_flush();
?>

Thank you!:)
data:"username =" + username
data:"username=" + username 

您必须在用户名和所有工作后删除空格

您需要

正确传递$username变量。

单引号 PHP var 被视为纯字符串,不计算变量。

$query = mysqli_query($con,"SELECT * FROM users WHERE username = " .  $username . ";");

$query = mysqli_query($con,"SELECT * FROM users WHERE username = {$username}");