0

正如标题所说,我正在尝试使用 Ajax 在注册表中检查数据库中是否存在用户名。

我使用以下脚本:

    $(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
    $('#user_id').keyup(function(){
        //run the character number check
        if($('#user_id').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 user_id = $('#user_id').val();

    //use ajax to run the check
    $.post("db.php", { user_id: user_id },
        function(result){
            //if the result is 1
            if(result == 1){
                //show that the username is available
                $('#username_availability_result').html(user_id + ' is Available');
            }else{
                //show that the username is NOT available
                $('#username_availability_result').html(user_id + ' is not Available');
            }
        });

}

我的db.php文件如下所示:

if (isset($_POST['action']) && $_POST['action'] == "signup") {
$user_id      = mysql_real_escape_string($_POST["user_id"]);
$new_password = md5(mysql_real_escape_string($_POST["new_password"]));
$new_email    = mysql_real_escape_string($_POST["new_email"]);
$checking_existance=mysqli_query($str,"SELECT username FROM users WHERE username='".$user_id."'");
$row=mysqli_fetch_assoc($checking_existance);
print_r($checking_existance);
if(mysqli_num_rows($checking_existance)>0)
 {
    echo 0;
 }
else{
    echo 1;
}

}

我遇到的问题是结果总是显示用户名不可用,即使它是。

4

3 回答 3

0

只需以简单的方式(i found that there is no action, new_password and new_email parameters in your javascript )进行,请也注意这一点。

Javascript

var min_chars = 3;
var characters_error  = 'Minimum amount of chars is 3';
var checking_html = 'Checking...';
var xhr_request = false;
var usernames = {};

$(function() {
  $("#user_id").on("keyup", check_availability );
});

function check_availability() {
  if ( xhr_request ) {
    xhr_request.abort();
  }
  var user_id = $.trim( $(this).val() );
  if ( !user_id || user_id.length < min_chars ) {
    $("#username_availability_result").html( characters_error );
    return;
  }

  // check user_id exists in runtime cache, to avoid useless requests :\
  if ( usernames[user_id] !== undefined ) {
    if ( usernames[user_id] === true ) {
      //show that the username is available
      $("#username_availability_result").html( user_id+" is Available" );
    }
    else {
      //show that the username is NOT available
      $("#username_availability_result").html( user_id+' is not Available' );
    }
    return;
  }

  //use ajax to run the check
  xhr_request = $.post( "c.php", { 'action' : 'validate', 'user_id' : user_id } );
  xhr_request.success(function( result ) {
    //if the result is 1
    if ( result == 1 ) {
      // add user_id to cache
      usernames[user_id]  = true;
      //show that the username is available
      $("#username_availability_result").html( user_id+" is Available" );
    }
    else {
      // add user_id to cache
      usernames[user_id]  = false;
      //show that the username is NOT available
      $("#username_availability_result").html( user_id+' is not Available' );
    }

  });
  xhr_request.fail(function() {
    $("#username_availability_result").html( "connection error, please try again" );
  });
}

PHP

<?php
  if ( isset( $_POST["action"] ) && isset( $_POST["user_id"] ) ) {
    $mysqli = new mysqli( "localhost", "my_user", "my_password", "my_db" );
    $userid = $mysqli->real_escape_string( $_POST["user_id"] );

    if ( $_POST["action"] === "validate" ) {
      $result = $mysqli->query( "SELECT username FROM users WHERE username = '{$userid}'" );

      if ( $result && $result->num_rows > 0 ) {
        echo "0";
      }
      else {
        echo "1";
      }
    }
    elseif ( $_POST["action"] == "signup" ) {
      // do the process
    }
  }
?>
于 2013-07-05T15:03:38.403 回答
0

我发现这对您很有用。您可以在以下链接上查看您的解决方案单击此处此处

于 2013-07-05T14:44:09.153 回答
0

您的db文件正在寻找一些$_POST您尚未传入的变量。

action, new_password and new_email

我猜如果你这样做了,console.log(result)你会得到undefined,因此它不是= 1,因此进入 else 语句。

您需要将AJAX调用更改为:

$.post("db.php", { 
  user_id: user_id, 
  action: action, 
  new_password: new_password,
  new_email: new_email
}, ...
于 2013-07-05T14:46:13.777 回答