注册表AJAX检查现有用户名(简单版本)

时间:2019-03-09 作者:Game Unity

我知道与这个主题相关的问题已经很多了,但我正在寻找一种简单的方法来对现有用户名进行ajax检查。因此,基本上我有HTML表单和两个函数(在function.php中)——一个用于发出ajax请求,另一个用于进行DB查找。注意:我使用的是WP Multisite。

The HTML Form:

<form method="post" name="register_user">
  <p> 
    <label for="register_name">Name<br> 
    <input type="text" name="register_name" placeholder="Enter your user name"> 
    </label>
  </p>
  <p>
    <label for="register_email">E-Mail<br> 
    <input type="text" name="register_email" placeholder="Enter your E-Mail"> 
    </label>
  </p>
  <p> 
    <label for="register_pass">Password<br> 
    <input type="text" name="register_pass" placeholder="• • • • • • •"> 
    </label>
  <p> 
    <input class="button-large register" type="submit" value="Sign Up">
  </p>

</form>

AJAX call:

function mpl_add_js_login(){
?>

    <script>
    jQuery( document ).ready(function($) {
        $(\'input[name="register_name"]\').change(function (e) {
            var this_field = $(this);
            var user_name = this_field.val();
            $(\'.uname_status\').remove();
            $.ajax({
                url : \'<?php echo admin_url( \'admin-ajax.php\' ); ?>\',
                type: "POST",
                data: {\'action\': \'check_username\', user_name: user_name},
                dataType: "json",
                success: function(response) {
                        this_field.closest(\'label\').append(\'<div class="uname_status \'+ response.text +\'">\'+response.text+\'</div>\');
                }
            });
        });
    });



    </script>
<?php
}
add_action(\'login_footer\',\'mpl_add_js_login\');

Username checkup:

function mpl_check_username() {

  $response = array();
    $username = sanitize_text_field($_POST[\'register_name\']);
    if(username_exists($username)){
        $response[\'status\'] = \'unavailable\';
    $response[\'text\'] = __(\'Username unavailable\');
    }else{
         $response[\'status\'] = \'available\';
     $response[\'text\'] = __(\'Username available\');
    }
    echo json_encode($response);
    die();
}
add_action(\'wp_ajax_nopriv_check_username\', \'mpl_check_username\');
add_action(\'wp_ajax_check_username\', \'mpl_check_username\');
ERROR: 此代码始终变为$response[\'status\'] = \'available\';即使你打字admin 作为用户名。username\\u exists()是否有问题;作用

1 个回复
最合适的回答,由SO网友:sMyles 整理而成

您正在发布user_name 但在你的代码中你要检查register_name, 你应该检查一下$_POST[\'user_name\'] 相反

您还应该检查以确保实际上也在传递值,我会这样做(将不可用设置为默认值):

function mpl_check_username() {

    $response = array(
        \'status\' => \'unavailable\',
        \'text\' => __( \'Username unavailable\' )
    );

    $username = array_key_exists( \'user_name\', $_POST ) ? sanitize_text_field( $_POST[\'user_name\'] ) : false;

    if ( $username && ! username_exists( $username ) ) {
        $response[\'status\'] = \'available\';
        $response[\'text\']   = __( \'Username available\' );
    }

    echo json_encode( $response );
    die();
}
所有的username_exists 函数执行以下代码:

$user = get_user_by( \'login\', $username );
if ( $user ) {
    $user_id = $user->ID;
} else {
    $user_id = false;
}
您也可以在代码中尝试这一点,以消除username_exists 由于某种奇怪的原因,过滤器被用来返回true。

相关推荐

当AJAX分页模板内的Echo跟随AJAX按钮不起作用时?

好的,这次我会尽量说清楚,我真的需要你们的帮助。我正在使用一个与Ajax一起工作的插件来创建一个follow按钮,让我们的用户互相关注。我把follow按钮放在任何需要用户这样跟踪其他用户的地方echo pwuf_get_follow_unfollow_links( //user id here );我面临的问题是,如果我在任何Ajax分页模板中添加了此echo函数,无论是Ajax分页后还是用户列表中的Ajax分页,下面的按钮都不起作用,并且在单击时找不到用户id!但在我将更多内容加载到第二页之前,他肯定