我有一个名为proxyCreate.php的php webservice,它将两个值(用户名和密码)传递给验证用户凭据的API。
这很好用。
但是,API返回仅返回经过身份验证的用户名,密码和身份验证日期。
我们还希望获取用户的deptID,但不幸的是,API无法执行此操作,我们无法控制API返回的内容。
因此,我试图查询数据库表以返回与经过身份验证的用户关联的DeptID。
到目前为止,我收到的错误是,"将无效参数传递给SQL_Srv查询"
到底有没有?
这是我到目前为止所拥有的。
<?php
error_reporting(E_ERROR | E_WARNING | E_PARSE);
session_start();
// Connect to SQL Server database
include("../../connections/Connect.php");
$upass = $_GET['upass'];
// Construct query
$tsql =
"
SELECT
ISNULL([ORGANIZATION],'')
FROM
[EMPLOYEE]
WHERE Lower([LOGINNAME]) = lower('$upass')
";
$stmt = sqlsrv_query( $conn, $tsql);
if( $stmt === false )
{
echo "Error in executing query.</br>";
die( print_r( sqlsrv_errors(), true));
}
$results = array();
// Retrieve and display the results of the query
//$lastFeatType = "";
while($row = sqlsrv_fetch_array($stmt,SQLSRV_FETCH_ASSOC)) {
array_push($results,$row);
}
echo json_encode($results);
// Free statement and connection resources
sqlsrv_free_stmt( $stmt);
sqlsrv_close( $conn);
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
</head>
<body>
<h1>
FTS Service Requests
</h1>
<div class="action-container" style="display:none;"></div>
<div id="tabs">
<ul>
<div id="dialog" title="Basic dialog">
<p style="font-size:14pt;">User Log In</p>
</div>
</ul>
<p>
</p>
<br clear="all" />
<div>
<br /> <br />
<br />
<?php
//Start session
session_start();
header("Cache-Control: no-store, must-revalidate, max-age=0");
header("Pragma: no-cache");
header("Expires: Thu, 19 Nov 1981 08:52:00 GMT");
if(!empty($_GET['status'])){
echo '<div align=center><font color=firebrick>You have been logged out!</font><br><br>Log in again or close browser.</div>';
}
?>
<br />
<br />
<br />
<form id="FormToValidate">
<table>
<tr>
<td nowrap>
<div class="input text">
<label><strong>UserName:</strong></label>
<input maxlength="40" class="required" name="user" id="user" size="20" placeholder="Enter username!" type="text" title="Please enter a username." tabindex="2" value="" style="width:400px;color:#000;font-size:10pt;height:20px;" />
</div>
</td>
</tr>
<tr>
<td nowrap>
<div class="input text">
<label><strong>Password:</strong></label>
<input maxlength="40" class="required" name="pass" id="pass" size="20" placeholder="Enter password!" type="password" tabindex="3" title="Please enter a password." value="" style="width:400px;color:#000;font-size:10pt;height:20px;" />
</div>
</td>
</tr>
<tr>
<td></td>
<td>
<div class="buttonSubmit">
<input type="button" id="btnValidate" style="width:80px; margin-left:-152px;background-color:#fff;" value="Log In" />
</div><br clear="all"/>
</td>
</tr>
</table>
</form>
</div>
<script type="text/javascript">
$("#btnValidate").click(function() {
// Creating variables to hold data from textboxes
var uname = $("#user").val();
var upass = $("#pass").val();
$.post("proxyCreate.php",
{ data: JSON.stringify({ LoginName: uname,Password: upass }) })
.done(function(data) {
var result = JSON.parse(data);
switch(result.Status) {
case 0:
//login successful
tokenVal = result.Value.Token;
location.href = "http://Accounts/accounts.php?token="+tokenVal+ "&user=" + uname;
break;
case 2:
//invalid login
alert(result.Message);
break;
}
})
.fail(function() {
alert("The AJAX request failed!");
});
});
</body>
</html>
答案 0 :(得分:0)
看起来表单帖子未正确处理。请注意,这是一个POST方法......
$.post(...
但是,在代码中,您正在寻找GET值:
$upass = $_GET['upass'];
这会导致$upass
无价值。您想要使用$_POST
数组:
$upass = $_POST['upass'];
此外,看起来页面正在一个地方检查值:
if(!empty($_GET['status'])){
但是在运行实际查询之前不检查值。应该在该查询周围使用相同的if
块,以确保在尝试从数据库中找到DeptID
之前已提供该值。
最后,看起来您正在混淆服务器端和客户端操作顺序。这是由AJAX请求发布的页面吗?反应不会像你期望的那样。你正在回应JSON数据:
echo json_encode($results);
但页面的其余部分仍然执行,因此所有HTML标记也将被返回。这可能会混淆JSON解析器客户端。我建议将UI页面与JSON服务分成两个单独的文件。
答案 1 :(得分:-1)
$tsql =
"SELECT ISNULL([ORGANIZATION],'') FROM [EMPLOYEE]
WHERE Lower([LOGINNAME]) = lower('".$upass."')
";