jQuery用户名可用性 - 两者都返回“不可用”

时间:2015-10-21 20:50:44

标签: php jquery

在回复上一个问题后,我使用jQuery返回用户名是否可用,我在网站上找到了一些代码,告诉我如何操作。从我所看到的,代码似乎是正确的结构,并连接到数据库,但即使名称不在数据库中,它返回它不可用。

这是jQuery(和注册表单),它包含在register.php文件中(将在jQuery下面链接)。

<div class="registration">
  <h3>Register - Create a new Account</h3>

  <form action="confirm-registration.php" method="POST">
    <input type="text" name="create-username" id="username" placeholder="Username" maxlength="25" /><input type='button' id='check_username_availability' value='Check Availability'>
<div id='username_availability_result'></div>  <br />
    <input type="password" name="create-password" placeholder="Password" /> <br />
    <input type="password" name="confirm-password" placeholder="Confirm Password" /> <br />
    <input type="email" name="create-email" placeholder="E-mail Address" maxlength="45" /> <br />
    <input type="submit" value="Complete Registration" />
  </form>

  <form>
    <input type="submit" value="Cancel" />
  </form>
</div>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<script src="http://maps.googleapis.com/maps/api/js?key=AIzaSyCJnj2nWoM86eU8Bq2G4lSNz3udIkZT4YY&sensor=false"></script>
  <script type="text/javascript" src="/check-user.js"></script>
<script type="text/javascript">
$(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 > 0){
                    //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');
                }
        });

}
</script>

下面的代码链接在与此相关的最终文件中 - check-username.php。这是使用用户名查询数据库然后返回它的文件。我将链接下面这个PHP。

<?php
    include '../connect.php';

    if (isset($_SESSION['signed_in']) && $_SESSION['signed_in'] == true ) {
      header('Location : http://localhost/blog');
    } else {
      echo include 'registration_form.php';
      require 'check_username.php';
    }
 ?>
<?php
    $username = mysql_real_escape_string(isset($_POST['create-username']));

    //mysql query to select field username if it's equal to the username that we check '
    $result = mysql_query('SELECT user_name from users where user_name = "'. $username .'"');

    //if number of rows fields is bigger them 0 that means it's NOT available '
    if(mysql_num_rows($result) > 0){
      //and we send 0 to the ajax request
      echo 0;
    } else {
      //else if it's not bigger then 0, then it's available '
      //and we send 1 to the ajax request
      echo 1;
    }

对此有任何帮助将不胜感激,这不是我的代码,我没有做太多的jQuery,所以在尝试了一些事情后,我现在完全失去了如何解决它。

谢谢, 本

4 个答案:

答案 0 :(得分:1)

这不符合你的想法:

$username = mysql_real_escape_string(isset($_POST['create-username']));

这里的结果将是:

$username = 'true';

因为isset()返回一个布尔值。您可以检查是否设置了某些内容:

if (!isset($_POST['create-username'])) {
    // show an error, stop processing the page
}

但要获得实际值,isset()不是您想要的:

$username = mysql_real_escape_string($_POST['create-username']);

这样您就可以检查用户输入值,而不是布尔值。 (奇怪的是,你的数据中有一个'true'或其他任何评估的用户名。可能是其他地方的另一个类似错误。)

作为旁注,即使您使用的是mysql_real_escape_string(),您仍应调查升级到mysqli之类的内容并使用带有查询参数的预准备语句。

附加说明:目前,您的用户名比较区分大小写。因此,'David''david'将被视为不同的用户。如果那不是你想要的,你可能想要在外壳上标准化。存储用户输入的未修改用户名并将其设置为大写/小写以进行比较,或者在存储之前将其设置为大写/小写,并始终对其他输入执行相同操作。

答案 1 :(得分:1)

除了已经提到的内容之外:

在你的jQuery中,你正在使用:

$.post("check_username.php", { username: username }...)

"bob" => "bob"作为键/值对发布。

试试这样:

{ "username": username }

此外,您的PHP正在检查:

$_POST['create-username']

虽然它应该是:

$_POST['username'] 

(应该与Ajax中的$.post匹配)

<小时/> 使用Chromes network console监控请求并确保获得预期结果。

答案 2 :(得分:0)

您需要在SQL中规范化比较。请参阅LOWER() mysql函数和strtolower php函数。我还要添加trim()以获得良好的衡量标准。

$result = mysql_query('SELECT user_name from users where LOWER(user_name) = "'. strtolower(trim($username)) .'"');

此外,如果只是回显echo mysql_num_rows(result);

,你可以将底部的逻辑切换为一行。

是的isset()应该出来。

答案 3 :(得分:-1)

$ username = mysql_real_escape_string(isset($ _ POST [&#39; create-username&#39;]));

由于isset函数,$ username的值不正确:尝试删除它。