2013-03-02 62 views
0

我已經沿着一個ajax查找tutorial通知用戶,如果用戶名已被採取。ajax mysql查找不返回正確的結果爲多字字符串

所以控制器語法是:

<?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上失敗。如何修改代碼來驗證帶空格的字符串?

感謝一如既往,

回答

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'; 
     } 
+0

更不用說顯而易見的SQL注入。 – Iraklis 2013-03-02 12:38:32

+0

當使用自己的活動記錄時,CI轉義SQL注入。 – 2013-03-02 12:41:31

+0

我的錯誤,我在考慮不驗證用戶輸入,因爲他沒有使用表單驗證類。 – Iraklis 2013-03-02 12:46:32

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

好吧運氣

相關問題