2016-03-06 61 views
2

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

这是我username.php在用户实际输入用户名密码&从check.php被触发哪里...

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

<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> 

这是check.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); 

    ?> 

check.php工作正常(我通过单独执行它检查并在发现的用户名返回和反之亦然
然而,当我执行username.php它总是返回用户名已被拍摄。它看起来实际上并没有在数据库中看到实际上没有这种用户名的地方。

任何形式的帮助将非常感激......

+1

您在发送用户名错误 –

+0

尝试添加警报(数据);里面的成功回调函数,所以你可以看到从php – Praveen

+0

@Muhammad M是返回什么是的,我不得不将它更改为静态用户名后动态不工作,只是为了确保查询工作。 – echology

回答

3

使用jQuery这样发送的数据在javascript:

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

在你check.php得到的用户名这样

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

$username = trim($_POST['user']); 

对于本正常工作你check.php必须r eturn要么1或0,不要回应mysql错误那里或任何。如果发生任何错误,只需回显0.

+0

您指出了正确的问题并给出了正确的解决方案。谢谢。 – echology

+0

很高兴我可以帮忙,当你知道如何处理它时,jquery是野兽。 –

+0

没错。当你找不到解决问题的方法时,一头野兽。最好当你真正找到。 :-) – echology

-2

check.php

<?php 
$username = $_POST['username']; // You sending a post request 
$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); 

    ?> 
0

您需要正确地传递$ username变量。

单引号php vars被视为纯字符串,并且变量未被评估。

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

OR

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

感谢您的回应,但这似乎不是问题,因为查询返回一个布尔值。 – echology

+0

他正在使用双引号,他的PHP代码正常工作。而你的代码使这个查询失败。 –