0

我为我的网站创建了一个 onkeyup 验证用户名的程序。它使用带有 XMLHttpRequest 的 JavaScript。我不知道我的代码有什么问题。js代码是:

    function search(username)
{
var xmlhttp, answer;
if (window.XMLHttpRequest)
{
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else if (window.ActiveXObject)
{
// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
else
{
alert("Sorry, your browser seems to not support XMLHTTP functionality.");
}


xmlhttp.onreadystatechange=function()
{
if(xmlhttp.readyState==4)
{
answer=xmlhttp.responseText;
if(compare_strings(answer,1))
{
document.getElementById("nameInfo").className="error";
document.getElementById("username").className="error";
document.getElementById("nameInfo").innerHTML="Please enter your desired username.";
}
else if(compare_strings(answer,2))
{
document.getElementById("nameInfo").className="error";
document.getElementById("username").className="error";
document.getElementById("nameInfo").innerHTML="The username <strong>"+username+"    </strong> is not allowed.";

}
else if(compare_strings(answer,3))
{
document.getElementById("nameInfo").className="error";
document.getElementById("username").className="error";
document.getElementById("nameInfo").innerHTML="The username <strong>"+username+"    </strong> has already been taken.";

}
else
{
document.getElementById("nameInfo").className="success";
document.getElementById("username").className="";
document.getElementById("nameInfo").innerHTML="Username <strong>"+username+"</strong>     is available.";
flag=1;

}
}
}
var url="ajax_search.php";
url=url+"?q="+username;
url=url+"&sid="+Math.random();
xmlhttp.open("GET",url,true);
xmlhttp.send(null);
/*It has been assumed here that ajax_search.php is in the same directory.*/
xmlhttp.send(null);
}

我的 php 代码有效。当我加载网站并将 aq 放在 .php 后面时?它呼应了正确的答案。无论如何,这是代码:

function chek_avail($username)
{
global $link;
$length=strlen($username);
if($length==0)
$res=1;
else if($length>5 && $length<15)
{
$res=4;
$query = "SELECT * FROM users";

if($result=$link->query($query)){
while($row=$result->fetch_assoc())
{
if(strcmp($username,$row['username'])==0)
$res=3;
}
}
}
else
$res=2;
echo $res;
}
$username=$_GET["q"];
chek_avail($username);
?>

谢谢你的帮助!

4

1 回答 1

0

啊,老派 AJAX 请求。他们带回了这样的……噩梦。我可以建议使用 jQuery 吗?获取是如此方便的功能

jQuery().get('your URL here', function(answer) {
    if(compare_strings(answer,1))...
    // the rest of your code here
});

就是这样!您不再需要编写自己的 AJAX。适用于所有浏览器和不一致。说真的,没有人会像你现在那样做。

现在,关于您的 PHP... 您正在获取整个users表,然后循环遍历它以查找用户名?让您的数据库代替工作怎么样?

$query = "SELECT * FROM users WHERE username = (?)";
$stat = $link->prepare($query);
$stat->bind_param("s", $username);
$stat->execute();
$result = $stat->get_result();
$stat->close();

您可以从那里保留相同的代码,但是您的数据库现在可以分担负载并告诉您是否$username在其中。这段代码是 SQL 注入安全的。users更好的是,每次执行此操作时,您都不会遍历整个表格。

于 2013-10-11T03:21:05.280 回答