0

ユーザー名が既に使用されているかどうかをユーザーに通知する ajax ルックアップのチュートリアルに従いました。

したがって、コントローラーの構文は次のとおりです。

<?php
    class Login extends CI_Controller
    {
        function index()
        {
            $this->load->view('loginView');
        }
        function getResultfromdb($username){

            $this->db->where('username',$username);
            $query = $this->db->get('users')->num_rows();
            if($query == 0 ) echo 'userOk';
            else echo 'userNo';
        }
    }

ビューは次のとおりです。

<html>
    <head>
        <title>Check User Name</title>
        <link type="text/css" rel="stylesheet" href="<?=base_url()?>css/style.css"/>
    </head>

    <body>
        <form method="post" action="">

            <label for="username">Enter Your Name</label>
            <input type="text" id="username"/>
            <span class="checkUser" ></span>
            <input type="hidden" class="hiddenUrl"/>
        </form>

        <script type="text/javascript" src="<?=base_url()?>js/jquery-1.6.2.min.js"></script>
        <script type="text/javascript" src="<?=base_url()?>js/check.js"></script>

    </body>
</html>

check.js は次のとおりです。

$(document).ready(function(){

    $('#username').blur(function(){

        if( $('#username').val().length >= 3 )
            {
              var username = $('#username').val();
              getResult(username); 
            }
        return false;
    })
    function getResult(name){
        var baseurl = $('.hiddenUrl').val();
        $('.checkUser').addClass('preloader');
        $.ajax({
            url : baseurl + 'index.php/login/getResultfromdb/' + name,
            cache : false,
            success : function(response){
                $('.checkUser').removeClass('preloader');
                if(response == 'userOk') $('.checkUser').removeClass('userNo').addClass('userOk');
                else $('.checkUser').removeClass('userOk').addClass('userNo');;
            }
        })
    }
})

前述のように、これはうまく機能します。したがって、それは検証さbobれ、andy完全に行われます。ただし、それは失敗しbob smithますandy jones。スペースを含む文字列を検証するためにコードをどのように適合させることができますか?

いつもありがとう、

4

2 に答える 2

1

URL でユーザー名を渡そうとしているため、失敗しています。ブラウザは、渡すときにスペースを %20 としてエンコードしている可能性があります。したがって、CI 関数は bob smith ではなく bob%20smith を探します。

まず第一に、ユーザー名にスペースを使用することさえ許可するのは良い習慣ではないと思いますが、それぞれにスペースを許可します。最初に URL をデコードする必要があります

 function getResultfromdb($username){

            $this->db->where('username',urldecode($username));
            $query = $this->db->get('users')->num_rows();
            if($query == 0 ) echo 'userOk';
            else echo 'userNo';
        }
于 2013-03-02T12:23:24.830 に答える
0

encodeURIComponent(string)たとえば、次のように使用します。

var name = encodeURIComponent(name);

あなたのjsはこのようになります

$(document).ready(function(){

$('#username').blur(function(){

    if( $('#username').val().length >= 3 )
        {
          var username = $('#username').val();
          getResult(username); 
        }
    return false;
})
function getResult(name){
    var name = encodeURIComponent(name); // Replace name before send it
    var baseurl = $('.hiddenUrl').val();
    $('.checkUser').addClass('preloader');
    $.ajax({
        url : baseurl + 'index.php/login/getResultfromdb/' + name,
        cache : false,
        success : function(response){
            $('.checkUser').removeClass('preloader');
            if(response == 'userOk') $('.checkUser').removeClass('userNo').addClass('userOk');
            else $('.checkUser').removeClass('userOk').addClass('userNo');;
        }
    })
}
})

そしてphp:

<?php
$url = urldecode($_GET['name']); // Replace with your parameter 
?>

幸運を祈ります

于 2013-03-02T12:20:26.920 に答える