2014-12-05 73 views
2

好的,這讓我感到非常緊張。我已經在這裏嘗試了很多其他的答案,但沒有用,我恨我不得不發佈一些被打死的東西,但我不能讓這個工作。jQuery檢查用戶名是否被採用

我正在檢查我的數據庫以查看用戶名是否存在,無論我輸入什麼(無論是否存在),返回都表示該名稱可用。如果我運行檢查並將其轉儲到屏幕上,則會打印正確的退貨。

<?php 
    $query = new Application_Model_Queries(); 
    $false = $query->userNames('vikingblooded'); 
    print_r($false); //prints 1 
    $true = $query->userNames('someonespecial'); 
    print_r($true); prints nothing 

?> 

的Javascript:

$(document).ready(function() { 
    $("#username").keyup(function() { 
     $("#message").html("<img src='<?php echo $this->baseUrl('images/ajax-loader.gif'); ?>' class='status' /> checking..."); 
     var username = $("#username").val(); 
     $.ajax({ 
      method: "POST", 
      url: "<?php echo $this->baseUrl('users/check') ?>", 
      data: {username: username}, 
      success: function (data) { 
       if (data === 1) { 
        $("#message").html("<img src='<?php echo $this->baseUrl('images/cross.png') ?>' /> Username already taken"); 
       } else { 
        $("#message").html("<img src='<?php echo $this->baseUrl('images/tick.png') ?>' /> Username available"); 
       } 
      } 
     }); 

    }); 

}); 

PHP

public function userNames($uName) { 
    $select = $this->_dbTableUsers->select() 
      ->from($this->_dbTableUsers, array('user_name')) 
      ->where('user_name = ?', $uName); 
    $rows = $this->_dbTableUsers->fetchRow($select); 
    if ($rows) { 
     return true; 
    } 
} 

HTML

<table> 
     <tr> 
       <td>Username</td> 
       <td>:</td> 
       <td><input type="text" name="username" id="username"/><td> 
       <td id="message"><td> 
     </tr> 

     <tr> 
       <td>Password</td> 
       <td>:</td> 
       <td><input type="text" name="password" id="password" /><td> 
     </tr> 
</table> 
+0

我不認爲JS裏面的PHP將得到執行,像你的AJAX網址。 – mopo922 2014-12-05 22:19:03

+0

而不是返回true/false,你試過返回一個像「available」或「unavailable」這樣的字符串,然後檢查它嗎? – j08691 2014-12-05 22:20:22

+0

正在執行。 – VikingBlooded 2014-12-05 22:21:13

回答

0

你不能從JS格式化數據,以正確PHP,也沒有定義方法的正確方式:

$.ajax({ 
    method: "POST", // changed from type: "post" 
    url:"<?php echo $this->baseUrl('users/check')?>", 
    data: { username: username }, // changed from "username="+username 
    success:function(data){ 
     if(data == 1){ 
      $("#message").html("<img src='<?php echo $this->baseUrl('images/cross.png')?>' /> Username already taken");        
     } else { 
      $("#message").html("<img src='<?php echo $this->baseUrl('images/tick.png')?>' /> Username available"); 
     } 
    } 
}); 

你也可能應該定義你期待回的數據的類型,並嘗試使用JSON將數據從PHP傳遞給JS:

PHP:

<?php echo json_encode(array('someValue' => false)); ?> 

JS:

$.ajax({ 
    // other stuff 
    dataType: 'json' 
    // other stuff 
}); 
+0

沒有改變任何東西,仍然說我輸入的任何東西都可用。 – VikingBlooded 2014-12-05 22:23:44

+0

您使用PHP的框架是什麼?使用ZF1的 – vcanales 2014-12-05 22:27:07

+0

...... – VikingBlooded 2014-12-05 22:29:39

-1

我會做的是在PHP中使用

@ob_start; 

//your code 
//... 
//.. 
$return_arr["exists"] = 1; //or 0 if does not exist 
ob_end_clean();     
echo (json_encode($return_arr)); 

然後在Ajax中使用類似:

$.ajax({ 
      type: "POST", 
      url: url, 
      data: data, 
      dataType: dataType, 
      success: function(data) { 
        if (data.exists == 1) 
        { 
         console.log('Exists'); 
        } else { 
        console.log('nope'); 
        } 
       },    
      error: function (data){     
       console.log(data); 
      } 
     }); 

請記住我沒有探測此代碼...