Javascript 检查用户名是否存在不工作

Javascript 检查用户名是否存在不工作,javascript,php,mysql,if-statement,mysqli,Javascript,Php,Mysql,If Statement,Mysqli,我认为问题与有关,如果(数据==1)此时,警报框一直显示可用,当我将其更改为==时,警报框一直显示不可用。我不确定问题出在哪里 这是我的register.html <form name="registerform" id="registerform" action="register.php" method="post"> <div class="form_settings">

我认为问题与
有关,如果(数据==1)
此时,警报框一直显示可用,当我将其更改为
==
时,警报框一直显示不可用。我不确定问题出在哪里

这是我的register.html

                    <form name="registerform" id="registerform" action="register.php" method="post">
                        <div class="form_settings">

                            <p>
                                <label for="firstname">First Name:</label>
                                <input name="firstname" id="firstname" maxlength="32" type="text" placeholder="Optional" />
                            </p>
                            <p>
                                <label for="username" id="usernameText">Username:</label>
                                <input data-parsley-pattern="^[A-Za-z0-9_]{3,15}$" data-parsley-length="[3, 15]" name="username" id="username" maxlength="32" type="text" data-parsley-error-message="Username needs to be between 3 and 15 characters. Case sensitive. No special characters allowed." required/>
                            </p>
                            <p>
                                <label for="password1">Password:</label>
                                <input name="password1" id="password1" data-parsley-pattern="^[A-Za-z0-9_-]{5,25}$" data-parsley-length="[5, 25]" type="password" data-parsley-equalto="#password2" data-parsley-error-message="Passwords must match. Needs to be between 5 and 25 characters. Case sensitive. No special characters allowed." required/>
                            </p>
                            <p>
                                <label for="password2">Confirm Your Password:</label>
                                <input name="password2" id="password2" data-parsley-length="[5, 25]" data-parsley-error-message="Passwords must match. Needs to be between 5 and 25 characters. Case sensitive. No special characters allowed." data-parsley-pattern="^[A-Za-z0-9_-]{5,25}$" type="password" data-parsley-equalto="#password1" required/>
                            </p>
                            <p>
                                <label for="email">E-Mail:</label>
                                <input data-parsley-trigger="change" name="email" id="email" maxlength="1024" type="email" required/>
                            </p>
                            <p style="padding-top: 15px"><span>&nbsp;</span>
                                <input type="submit" class="submit" name="createacc" value="Register" />
                            </p>
                        </div>
                    </form>
这是我的checkuser.php

<?php
define('DB_SERVER', "localhost");
define('DB_USER', "XXX");
define('DB_PASSWORD', "XXX");
define('DB_DATABASE', "XXX");   
$mysqli = new mysqli(DB_SERVER, DB_USER, DB_PASSWORD, DB_DATABASE);    
if(mysqli_connect_errno()) {
    echo "Connection Failed.";
    exit();
}
$username = mysqli_real_escape_string($_POST['username']);     
$result = mysqli_query("SELECT `username` FROM `accounts` WHERE username = '$username'");  
if(mysqli_num_rows($result)>0){  
    echo json_encode(0);   
}else{  
    echo json_encode(1);  
}      
?>

返回的字符串中实际上有一个错误

两件事:
mysqli\u real\u escape\u string()需要两个参数,而
mysqli\u query()需要两个参数

现在这两个方法都需要两个参数,并且由于您只提供了一个参数,因此它返回的是错误字符串,而不是
0
1
。因此,添加mysqli连接变量作为这两个方法中的第一个参数。这是更换代码

$username = mysqli_real_escape_string($mysqli, $_POST['username']);     
$result = mysqli_query($mysqli,"SELECT `username` FROM `ncs_users` WHERE username = '$username'"); 
为了安全起见,请尝试使用查询,而不是像查询中使用
$username
那样进行连接。

您可以返回

if(mysqli_num_rows($result)>0){  
    echo json_encode(array('vaild' => false));
die;   
}
else{  
    echo json_encode(array('vaild' => true));  
}  
在javascript集合中:

$.ajax({
                        type: 'POST',
dataType: "json",
                        data: {
                            username: username
                        },
                        url: 'checkuser.php',
                        success: function (data) { //Receives the data from the php code
                            if(data.valid == true){  
                                //show that the username is available  
                                alert("available");
                            }else{  
                                //show that the username is NOT available  
                                alert("Unavailable");
                            }  

                        },
                        error: function (xhr, err) {
                            console.log("readyState: " + xhr.readyState + "\nstatus: " + xhr.status);
                            console.log("responseText: " + xhr.responseText);
                        }
                    });
                    $('#registerform').parsley();
                }
            });

我希望这将对您有所帮助。

在您的PHP代码中,您必须回显
1
(可用)或其他内容(不可用),我不确定
json\u encode(1)
是否发送
1
“1”
或完全不同的内容。如果我错了并且
json\u encode(1)
正常,那么请确保您的PHP页面没有发送HTML自动代码。要做到这一点,您必须确保该页面只包含PHP代码。不:
@Verhaeren当我将其设置为
if(data==““1”)
时,如果我将其设置为
if(data==“1”)
则警报框会一直显示available
var\u dump(json\u encode(1))
输出
字符串(1)“1”
。因此,您的
if
语句应该类似于
if(data==“1”)
,因为它是一个字符串。@CEP That not work=/@Verhaeren我更改了回显代码,但它仍然不起作用。当我把它改成报警(数据)我一直得到的都是1。我把它们改成你说的。你说的有道理。但是不管发生什么,警报框仍然显示不可用=/您是否在Firefox的firebug
控制台中检查了输出?如果您使用的是
googlechrome
,请使用内置调试器进行尝试。你用哪种浏览器?我用的是chrome。还有一个超级愚蠢的问题。我不确定如何使用调试程序(不是问题,伙计:)。在您的页面中,按F12键,您的窗口将被分为两个半窗口。选择
网络
选项卡。然后激发事件,让控制台记录相同的事件。在
Name Path
列中选择
checkuser.php
。单击后,您将在右侧获得详细信息。在此右侧面板中,单击“预览”选项卡。如果一切正常,您应该看到
0
1
作为答案。否则一些错误字符串将是可见的,我100%肯定。哇,你真的是最好的!好的,当我输入一个已经注册的用户名时,它现在说“1无属性”,它仍然说“1无属性”未编码的SyntaxError:意外标识符
$.ajax({
                        type: 'POST',
dataType: "json",
                        data: {
                            username: username
                        },
                        url: 'checkuser.php',
                        success: function (data) { //Receives the data from the php code
                            if(data.valid == true){  
                                //show that the username is available  
                                alert("available");
                            }else{  
                                //show that the username is NOT available  
                                alert("Unavailable");
                            }  

                        },
                        error: function (xhr, err) {
                            console.log("readyState: " + xhr.readyState + "\nstatus: " + xhr.status);
                            console.log("responseText: " + xhr.responseText);
                        }
                    });
                    $('#registerform').parsley();
                }
            });