使用 ajax php 检查用户名是否存在的问题
Issues checking if username exists using ajax php
我对下面的代码有疑问。
- 下面的代码会实时检查用户名是否已存在于数据库中。现在,当我手动输入用户名时,一切正常,可以根据情况给出实时成功或错误消息,但是当输入 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;
}
?>
- 现在我的问题是如何保护
available.php
上的 POST
很多人告诉您需要清理或转义每个 POST
和 GET
数据。那么什么最适合 PDO。还听说转义不适用于 PDO 可能是我错了吗?
- 尝试 jquery .change() 而不是 .keyup()
我对下面的代码有疑问。
- 下面的代码会实时检查用户名是否已存在于数据库中。现在,当我手动输入用户名时,一切正常,可以根据情况给出实时成功或错误消息,但是当输入 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;
}
?>
- 现在我的问题是如何保护
available.php
上的POST
很多人告诉您需要清理或转义每个POST
和GET
数据。那么什么最适合 PDO。还听说转义不适用于 PDO 可能是我错了吗?
- 尝试 jquery .change() 而不是 .keyup()