使用AJAX和PHP对MSSQL进行用户名可用性检查

使用AJAX和PHP对MSSQL进行用户名可用性检查,php,ajax,sql-server-2008,Php,Ajax,Sql Server 2008,我的数据库里已经有很多客户了。我们正试图让他们设置在线访问。他们必须提供他们的会员ID以建立他们的在线帐户。我已经建立了一个测试表单,允许输入memberid,并且应该检查我们是否在数据库中找到它们。为了使这项工作顺利进行,我已经竭尽全力了。我还制作了CRUD,因此我知道我与MSSQL的连接正在工作 这个代码有什么问题 形式 会员编号: 通过: document.getElementById(“uname”).onblur=function(){ var-xmlhttp; var uname=

我的数据库里已经有很多客户了。我们正试图让他们设置在线访问。他们必须提供他们的会员ID以建立他们的在线帐户。我已经建立了一个测试表单,允许输入memberid,并且应该检查我们是否在数据库中找到它们。为了使这项工作顺利进行,我已经竭尽全力了。我还制作了CRUD,因此我知道我与MSSQL的连接正在工作

这个代码有什么问题

形式


会员编号:
通过:
document.getElementById(“uname”).onblur=function(){
var-xmlhttp;
var uname=document.getElementById(“uname”);
如果(uname.value!=“”)
{
if(window.XMLHttpRequest){
xmlhttp=新的XMLHttpRequest();
}否则{
xmlhttp=新的ActiveXObject(“Microsoft.xmlhttp”);
}
xmlhttp.onreadystatechange=函数(){
if(xmlhttp.readyState==4&&xmlhttp.status==200){
document.getElementById(“status”).innerHTML=xmlhttp.responseText;
}
};
open(“GET”、“uname_availability.php?uname=“+encodeURIComponent(uname.value)),true;
xmlhttp.send();
}
};
下面是uname_availability.php

<?php
$uname=$_REQUEST['uname'];

$server = "serveraddress";
$user = "username";
$pwd = "password";
$db = "dbname";

$conn = sqlsrv_connect($server, array("UID"=>$user, "PWD"=>$pwd, "Database"=>$db));

if($conn === false){
    die(print_r(sqlsrv_errors()));
}

$sql = "SELECT * FROM tblMembership WHERE MemberID = ".$uname."";
$stmt3 = sqlsrv_query($conn, $sql);
$row_count = sqlsrv_num_rows($stmt3);
if ($row_count === false)
{
print "<span style=\"color:red;\">We Can Not Find You :(</span>";
}
else
{
print "<span style=\"color:green;\">We Found You :)  </span>";
}
?>

您的查询失败,因为您未能引用$username参数,导致SQL错误和无效,并存在以下漏洞:

$sql = "SELECT * FROM tblMembership WHERE MemberID = '".$uname."'";
                                                     ^--        ^--
如果没有引号,您正在执行
WHERE MemberID=fred
,我非常怀疑您的成员表中是否有
fred
字段


由于您的代码盲目地假设查询工作正常,因此您永远不会看到SQL server将提供的语法错误警告。

您不需要在SQL语句中引用参数值吗

$sql = "SELECT * FROM tblMembership WHERE MemberID = ".$uname."";
然后会变成

$sql = "SELECT * FROM tblMembership WHERE MemberID = '".$uname."'";

我最终得到了这个…感谢所有的投入…我真的很感激这一切

$sql = "SELECT MemberID FROM tblMembership WHERE MemberID = '".$memid."'";
$stmt = sqlsrv_query($conn, $sql);
$row = sqlsrv_fetch($stmt);
if (empty($row))
{
print "<span style=\"color:red;\">We Can Not Find You >:-(</span>";
}
else
{
print "<span style=\"color:green;\">We Found You :-)  </span>";
}
$sql=“从tblMembership中选择MemberID,其中MemberID='”$memid。“”;
$stmt=sqlsrv_查询($conn,$sql);
$row=sqlsrv_fetch($stmt);
如果(空($行))
{
打印“我们找不到您>:-(”;
}
其他的
{
打印“我们找到你了:-”);
}

为什么不显式地使用
$\u GET

if(isset($_GET['uname']))
{
  $uname=$_GET['uname'];
}
然后问我

$sql = "SELECT * FROM tblMembership WHERE MemberID ='$uname'";

你还没有说真正的问题是什么。您的代码是否给出了错误的结果、没有结果或错误?请始终使用参数化查询来避免SQL注入。我可以问一下为什么不使用Jquery吗?使用它会让你的生活更轻松。还有,到底发生了什么?它总是返回真值还是根本没有得到if语句?@Pondlife它总是显示“我们找不到你:”(“即使memberID存在。我甚至尝试过将memberID编码到select语句中,如下所示-select*,其中memberID=7990,它仍然显示“我们找不到你:(”@zazvorniki是的,我应该使用jQuery。这只是我正在测试的东西,它应该可以工作。它总是返回false。您是否尝试使用空()而不是if($row_count==false)我刚刚将其更改为:$sql=“SELECT*FROM tblMembership WHERE MemberID=”“$uname.”,但仍然得到否定的结果:(我还将var$uname更改为$memid
$sql = "SELECT * FROM tblMembership WHERE MemberID ='$uname'";