【问题标题】:ajax mysql lookup not returning correct result for multi word stringajax mysql查找未返回多字字符串的正确结果
【发布时间】:2013-03-02 12:02:28
【问题描述】:

我在 ajax 查找中关注了 tutorial,如果用户名已被占用,我会通知用户。

所以控制器的语法是:

<?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');;
            }
        })
    }
})

如前所述,这很好用。所以它将完美地验证bobandy。但是它在bob smithandy jones 上失败了。如何修改代码以验证带空格的字符串?

一如既往的感谢,

【问题讨论】:

    标签: ajax string codeigniter space


    【解决方案1】:

    失败是因为您尝试在 URL 中传递用户名,浏览器在传递时可能会将空格编码为 %20。所以你的 CI 函数正在寻找 bob%20smith 而不是 bob smith。

    首先,我认为在用户名中允许空格但每个人都有自己的空格并不是一个好习惯。您需要先对 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';
            }
    

    【讨论】:

    • CI 在自己使用活动记录时逃避 SQL 注入。
    • 我的错误,我在考虑不验证用户输入,因为他没有使用表单验证类。
    • 一切都好,正在等待您的回复,以确保我没有遗漏一些明显的东西,哈哈。我从不介意学习新事物,尤其是在保护应用程序方面。
    • 您好,先生们,感谢您的意见。我实际上并没有将其用于用户名,这只是教程。我将检查客户名称,因此这些通常是多字名称。 Massmart pyt ltd 等。谢谢,将尝试上述方法并恢复。
    【解决方案2】:

    使用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 
    ?>
    

    好的,祝你好运

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-25
      • 2021-10-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多