正如标题所说,我正在尝试使用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;
}
}
我遇到的问题是结果总是显示用户名即使不可用。
答案 0 :(得分:0)
我发现这对您有用。您可以通过以下链接检查您的解决方案Click Here或Here
答案 1 :(得分:0)
您的db
文件正在查找您尚未传入的多个$_POST
变量。
action, new_password and new_email
我猜如果你console.log(result)
undefined
,你会得到= 1
,因此它不是AJAX
,因此会进入else语句。
您需要将$.post("db.php", {
user_id: user_id,
action: action,
new_password: new_password,
new_email: new_email
}, ...
调用更改为:
{{1}}
答案 2 :(得分: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
}
}
?>