使用 ajax php 检查用户名是否存在的问题

Issues checking if username exists using ajax php

我对下面的代码有疑问。

  1. 下面的代码会实时检查用户名是否已存在于数据库中。现在,当我手动输入用户名时,一切正常,可以根据情况给出实时成功或错误消息,但是当输入 1 或 2 个字符后,我从浏览器提供的自动填充选项中选择用户名时,它不会给出任何成功或错误消息,而是保持显示 输入 3 到 11 个字符,这是满足用户名要求的初始消息。无法弄清楚为什么从自动填充选项中选择用户名时它不起作用。

index.php

<script type="text/javascript">
$(document).ready(function(){
$('#un').keyup(function(){
    var username = $(this).val();
    var Result = $('#result'); 
    if(username.length > 2 || username.length > 11) { // if greater than 2 (minimum 3)
        Result.html('./img/loadgreen.gif');
        var dataPass = 'action=availability&username='+username;
        $.ajax({ // Send the username val to available.php
        type : 'POST',
        data : dataPass,
        url  : 'available.php',
        success: function(responseText){ // Get the result
            if(responseText == 0){
                Result.html('<span class="success">Available</span>');
            }
            else if(responseText > 0){
                Result.html('<span class="error">Unavailable</span>');
            }
            else{
                alert('Problem with sql query');
            }
        }
        });
    }else{
        Result.html('Enter 3 to 11 characters');
    }
    if(username.length == 0) {
        Result.html('');
    }
 });
});
</script>

<table>
<tr>
<td>
<input type="text" name="username" id="un"  placeholder="Username" class="username" />
</td>
<td class="result" id="result"></td>
</tr>
</table>

available.php

<?php
include ( "./inc/connect.php" );
if(isset($_POST['action']) && $_POST['action'] == 'availability')
{
   $username = $_POST['username'];
   $que=$db->prepare("SELECT username FROM users WHERE username=:username");
   $que->execute(array(':username'=>$username));
   $count = $que->rowCount();
   echo $count;
}
?>
  1. 现在我的问题是如何保护 available.php 上的 POST 很多人告诉您需要清理或转义每个 POSTGET 数据。那么什么最适合 PDO。还听说转义不适用于 PDO 可能是我错了吗?
  1. 尝试 jquery .change() 而不是 .keyup()