【发布时间】:2012-01-26 14:52:15
【问题描述】:
我正在尝试检查我的用户名是否可以使用 jQuery 注册,该脚本实际上没有错误,但即使数据库中没有用户名记录,它仍然显示" the username in use "。
这是我的函数的 php 代码
function checkavailabileUserName($UserName) {
if(isSet($_POST['userName']))
{
$username = $_POST['userName'];
$sql_check = mysql_query("SELECT userUserName FROM user WHERE userUserName='$username'") or die(mysql_error());
if(mysql_num_rows($sql_check))
{
echo '<font color="red">The username <STRONG>'.$username.'</STRONG> is already in use.</font>';
}
else
{
echo 'OK';
}
}
}
我在一个名为RegisterUserAction.php 的页面上调用这个函数
checkavailabileUserName($UserName);
这里是 JAVASCRIPT 代码
pic1 = new Image(16, 16);
pic1.src = "loader.gif";
$(document).ready(function(){
$("#userName").change(function() {
var usr = $("#userName").val();
if(usr.length >= 3)
{
$("#status").html('<img src="loader.gif" align="absmiddle"> Checking availability...');
$.ajax({
type: "POST",
url: "RegisterUserAction.php",
data: "userName="+ usr,
success: function(msg){
$("#status").ajaxComplete(function(event, request, settings){
if(msg == 'OK')
{
$("#userName").removeClass('object_error'); // if necessary
$("#userName").addClass("object_ok");
$(this).html(' <img src="accepted.png" align="absmiddle"> <font color="Green"> Available </font> ');
}
else
{
$("#userName").removeClass('object_ok'); // if necessary
$("#userName").addClass("object_error");
$(this).html(msg);
}
});
}
});
}
else
{
$("#status").html('<font color="red">The username should have at least <strong>3</strong> characters.</font>');
$("#userName").removeClass('object_ok'); // if necessary
$("#userName").addClass("object_error");
}
});
});
最后是该字段的 HTML 代码
<td><label for="userName"></label>
<input type="text" name="userName" id="userName" onkeyup="twitter.updateUrl(this.value)" class="inn" />
<div id="status"></div>
<script type="text/javascript">
$( function () {
twitter.screenNameKeyUp();
$('#user_screen_name').focus();
});</script>
我哪里做错了?
【问题讨论】:
-
我更新了问题以放置我调用的函数
-
Eek.. 易受SQL Injection 的攻击。如果您看到消息“用户名已被使用”,那么您知道
mysql_num_rows返回大于 0。您知道实际查询是/返回什么吗?$username中有什么内容? -
它应该从数据库中返回用户名。
-
嗯,应该。但是,您应该确切了解执行了什么查询,以及
$username中的内容。 -
是的,您应该通过使用 mysql_fetch_assoc 执行 while 循环来仔细检查它返回的内容,并查看 userUserName 是否返回值