[英]Username Availability Check using AJAX and PHP against MSSQL
我有一个已经有很多客户的数据库。 我们试图让他们设置在线访问权限。 他们必须提供其会员ID才能设置其在线帐户。 我建立了一个测试表单,该表单允许输入memberid并应检查是否在数据库中找到它们。 我已拔掉头发,试图使其正常工作。 我也做了CRUD,所以我知道我与MSSQL的连接正在工作。
此代码有什么问题?
形成
<div class="container">
<div>Member ID: <input type="text" maxlength="10" name="uname" id="uname" /><span id="status"></span></div>
<div>Pass: <input type="password" maxlength="10" name="pwd" id="pwd" /></div>
</div>
<script type="text/javascript">
document.getElementById("uname").onblur = function() {
var xmlhttp;
var uname=document.getElementById("uname");
if (uname.value != "")
{
if (window.XMLHttpRequest){
xmlhttp=new XMLHttpRequest();
} else {
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState==4 && xmlhttp.status==200) {
document.getElementById("status").innerHTML=xmlhttp.responseText;
}
};
xmlhttp.open("GET","uname_availability.php?uname="+encodeURIComponent(uname.value),true);
xmlhttp.send();
}
};
</script>
这是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注入攻击漏洞:
$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>";
}
为什么不显式使用$_GET
,
if(isset($_GET['uname']))
{
$uname=$_GET['uname'];
}
然后像这样查询
$sql = "SELECT * FROM tblMembership WHERE MemberID ='$uname'";
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.